Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
edw1n
7 / 7 / 1
Регистрация: 12.11.2012
Сообщений: 114
#1

Записать в файл то простое число, которое есть общим для всех чисел - C++

16.05.2013, 21:20. Просмотров 427. Ответов 6
Метки нет (Все метки)

Такая задача: Дан файл натуральных чисел, которые не больше 255. Переписать во второй файл все простые числа, которые есть общими при разложении чисел с первого файла.

Вот я промоделировал, чтобы было понятнее как я хочу реализовать эту задачу.
Название: pic.jpg
Просмотров: 43

Размер: 27.0 Кб

К примеру, мы записываем в файл такие числа: 45, 120, 39, 78. Нам нужно их разложить на простые числа, а затем сравнивать их. Если они принадлежат сразу ко всем числам, то записываем их во второй файл.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.05.2013, 21:20
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Записать в файл то простое число, которое есть общим для всех чисел (C++):

Записать в файл KW квадраты всех четных чисел исходного файла, а в файл KB — кубы всех нечетных - C++
Создать файл K,элементы которого являются целыми числами.Записать в файл KW квадраты всех четных чисел исходного файла,а в файл KB - кубы...

Организовать ввод двух чисел, для которых заданное натуральное число является наибольшим общим делителем - C++
Организовать ввод двух чисел, для которых заданное натуральное число является наибольшим общим делителем. Нужно решить задачу в C++....

do-while. рганизовать ввод двух чисел, для которых заданное натуральное число является наибольшим общим делителем - C++
Организовать ввод двух чисел, для которых заданное натуральное число является наибольшим общим делителем.

Передать в функцию целое число. Функция заменяет его на ближайшее простое число, которое больше или меньше исходного. Вернуться в main( ) и распечатат - C++
Передать в функцию целое число. Функция заменяет его на ближайшее простое число, которое больше или меньше исходного. Вернуться в main( ) и...

Структуры. Записать в файл имена всех студентов, у которых есть оценка 3 - C++
Условие задачи: Необходимо записать в файл имена всех студентов, у которых есть оценка 3. Изначально создать файл с именами студентов. ...

Работа с файлами. Найти среднее арифметическое всех чисел и записать его в файл output.txt - C++
Помогите написать, пожалуйста 2 программы на C++. В файле input.txt записаны числа, сколько их – неизвестно. «3»: Найти среднее...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
diagon
Higher
1929 / 1195 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
16.05.2013, 21:26 #2
Просто считаете gcd от всех чисел. Если оно получилось непростым, то вытащите из него простые числа.
0
edw1n
7 / 7 / 1
Регистрация: 12.11.2012
Сообщений: 114
16.05.2013, 21:29  [ТС] #3
Цитата Сообщение от diagon Посмотреть сообщение
Просто считаете gcd от всех чисел. Если оно получилось непростым, то вытащите из него простые числа.
Можете подробней объяснить, пожалуйста. Похоже реализация простая, но пока не могу понять её.
0
diagon
Higher
1929 / 1195 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
16.05.2013, 21:41 #4
Ну, есть такая вещь как алгоритм Евклида. Рано или поздно вы с ним все равно столкнетесь. Просто погуглите.
Это наиболее оптимальное решение, так как факторизацию вам придется посчитать всего один раз (в самом конце).
0
edw1n
7 / 7 / 1
Регистрация: 12.11.2012
Сообщений: 114
16.05.2013, 21:47  [ТС] #5
Цитата Сообщение от diagon Посмотреть сообщение
Ну, есть такая вещь как алгоритм Евклида. Рано или поздно вы с ним все равно столкнетесь. Просто погуглите.
Это наиболее оптимальное решение, так как факторизацию вам придется посчитать всего один раз (в самом конце).
Ну с алгоритмом Евклида я немного знаком. То есть нам сначала нужно найти наибольший общий делитель всех чисел, а затем его разложить на простые числа и записать эти простые числа в новый файл ?
0
diagon
Higher
1929 / 1195 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
16.05.2013, 21:54 #6
Цитата Сообщение от edw1n Посмотреть сообщение
Ну с алгоритмом Евклида я немного знаком. То есть нам сначала нужно найти наибольший общий делитель всех чисел, а затем его разложить на простые числа и записать эти простые числа в новый файл ?
Да. Алгоритм Евклида найдет наибольшее число, которое встречается во всех ваших числах, но это число необязательно простое. И вот его разложение на простые множители будет ответом.
0
edw1n
7 / 7 / 1
Регистрация: 12.11.2012
Сообщений: 114
19.05.2013, 13:51  [ТС] #7
Сделал, но есть много мелочей, с которыми нужна помощь.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include <stdio.h>
#include <iostream>
#include <string.h>
 
int GCD (int a,int b,int n)
    { int tmp;
      while (b)
            { a %= b;
              tmp=a;
              a=b;
              b=tmp;
            }
      int z;
      if(n - 1 >= 0)
           { scanf ("%d", &z);
             return GCD(a,z,n--);
           }
      return a;
    }
 
void PrintFile (char*filename, int k)
     { FILE*fp;
       int i;
       fp=fopen (filename, "r+b");
       if (!fp)
          { puts ("File isn't opened");
          }
       for (int j=0; j<k; j++)
           { fread (&i,sizeof(int),1,fp);
             printf ("%d ", i);
           }
       printf ("\n");
       fclose(fp);
     }
 
int main (void)
    { int n, x, y, t;
      char filename[128];
      puts ("Enter filename");
      gets (filename);
      printf ("Enter n: ");
      scanf ("%d", &n);
      printf ("Enter numbers: ");
      scanf ("%d%d", &x,&y);
      printf ("GCD is: %d\n", GCD(x,y,n-2));
      t=GCD(x,y,n-2);
      FILE*fp;
      fp=fopen (filename, "w+b");
      if (!fp)
         { puts ("File isn't opened");
         }
      int i=2;
      while(i<=t)                               //Факторизация НОД
                 { if(t%i==0)
                   { printf("%d ",i);
                     fwrite (&i,sizeof(int),1,fp); //Записываем в файл наше простое число
                     t/=i;
                   }
                   else
                       i++;
                 }
      int k=i;
      printf ("\n");
      fclose(fp);
      PrintFile (filename, k);
      system ("pause");
      return 0;
    }
К примеру для чисел 12 и 24, отлично находит НОД, разлаживает его на простые числа и записывает их в файл.
Для чисел 12, 16, 18 вылетает ошибка сегментации.
Когда, к примеру, НОД - простое число, то вообще ничего не происходит.

А так же надо записывать в файл простые числа без повторений.
Помогите, пожалуйста.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.05.2013, 13:51
Привет! Вот еще темы с ответами:

Дано простое число. Составить функцию,которая будет находить следующее за ним простое число. - C++
дано простое число.составить функцию,которая будет находить следующее за ним простое число.

Дано простое число. Составить функцию, которая будет находить следующее за ним простое число - C++
Дано простое число. Составить функцию, которая будет находить следующее за ним простое число

Дано простое число. Составить функцию, которая будет находить следующее за ним простое число - C++
Дано простое число. Составить функцию, которая будет находить следующее за ним простое число.

Дано простое число. Составить функцию, которая будет находить следующее за ним простое число. - C++
6.2.2. Помогите, пожалуйста, решить задачи в С++ с помощью функций. Дано простое число. Составить функцию, которая будет находить...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
19.05.2013, 13:51
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru