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

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

Восстановить пароль Регистрация
 
edw1n
 Аватар для edw1n
7 / 7 / 1
Регистрация: 12.11.2012
Сообщений: 114
16.05.2013, 21:20     Записать в файл то простое число, которое есть общим для всех чисел #1
Такая задача: Дан файл натуральных чисел, которые не больше 255. Переписать во второй файл все простые числа, которые есть общими при разложении чисел с первого файла.

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

Размер: 27.0 Кб

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

C++ Передать в функцию целое число. Функция заменяет его на ближайшее простое число, которое больше или меньше исходного. Вернуться в main( ) и распечатат
Дано простое число. Составить функцию,которая будет находить следующее за ним простое число. C++
Организовать ввод двух чисел, для которых заданное натуральное число является наибольшим общим делителем C++
do-while. рганизовать ввод двух чисел, для которых заданное натуральное число является наибольшим общим делителем C++
Дано простое число. Составить функцию, которая будет находить следующее за ним простое число C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
16.05.2013, 21:26     Записать в файл то простое число, которое есть общим для всех чисел #2
Просто считаете gcd от всех чисел. Если оно получилось непростым, то вытащите из него простые числа.
edw1n
 Аватар для edw1n
7 / 7 / 1
Регистрация: 12.11.2012
Сообщений: 114
16.05.2013, 21:29  [ТС]     Записать в файл то простое число, которое есть общим для всех чисел #3
Цитата Сообщение от diagon Посмотреть сообщение
Просто считаете gcd от всех чисел. Если оно получилось непростым, то вытащите из него простые числа.
Можете подробней объяснить, пожалуйста. Похоже реализация простая, но пока не могу понять её.
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
16.05.2013, 21:41     Записать в файл то простое число, которое есть общим для всех чисел #4
Ну, есть такая вещь как алгоритм Евклида. Рано или поздно вы с ним все равно столкнетесь. Просто погуглите.
Это наиболее оптимальное решение, так как факторизацию вам придется посчитать всего один раз (в самом конце).
edw1n
 Аватар для edw1n
7 / 7 / 1
Регистрация: 12.11.2012
Сообщений: 114
16.05.2013, 21:47  [ТС]     Записать в файл то простое число, которое есть общим для всех чисел #5
Цитата Сообщение от diagon Посмотреть сообщение
Ну, есть такая вещь как алгоритм Евклида. Рано или поздно вы с ним все равно столкнетесь. Просто погуглите.
Это наиболее оптимальное решение, так как факторизацию вам придется посчитать всего один раз (в самом конце).
Ну с алгоритмом Евклида я немного знаком. То есть нам сначала нужно найти наибольший общий делитель всех чисел, а затем его разложить на простые числа и записать эти простые числа в новый файл ?
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
16.05.2013, 21:54     Записать в файл то простое число, которое есть общим для всех чисел #6
Цитата Сообщение от edw1n Посмотреть сообщение
Ну с алгоритмом Евклида я немного знаком. То есть нам сначала нужно найти наибольший общий делитель всех чисел, а затем его разложить на простые числа и записать эти простые числа в новый файл ?
Да. Алгоритм Евклида найдет наибольшее число, которое встречается во всех ваших числах, но это число необязательно простое. И вот его разложение на простые множители будет ответом.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.05.2013, 13:51     Записать в файл то простое число, которое есть общим для всех чисел
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
edw1n
 Аватар для 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 вылетает ошибка сегментации.
Когда, к примеру, НОД - простое число, то вообще ничего не происходит.

А так же надо записывать в файл простые числа без повторений.
Помогите, пожалуйста.
Yandex
Объявления
19.05.2013, 13:51     Записать в файл то простое число, которое есть общим для всех чисел
Ответ Создать тему
Опции темы

Текущее время: 21:37. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru