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

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

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

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

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

Такая задача: Дан файл натуральных чисел, которые не больше 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++ Как записать число которое имеет 22 цифр
Дано простое число. Составить функцию,которая будет находить следующее за ним простое число. C++
Организовать ввод двух чисел, для которых заданное натуральное число является наибольшим общим делителем C++
do-while. рганизовать ввод двух чисел, для которых заданное натуральное число является наибольшим общим делителем C++
Дано простое число. Составить функцию, которая будет находить следующее за ним простое число C++
C++ Дано простое число. Составить функцию, которая будет находить следующее за ним простое число.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
diagon
Higher
1924 / 1190 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
16.05.2013, 21:26     Записать в файл то простое число, которое есть общим для всех чисел #2
Просто считаете gcd от всех чисел. Если оно получилось непростым, то вытащите из него простые числа.
edw1n
7 / 7 / 1
Регистрация: 12.11.2012
Сообщений: 114
16.05.2013, 21:29  [ТС]     Записать в файл то простое число, которое есть общим для всех чисел #3
Цитата Сообщение от diagon Посмотреть сообщение
Просто считаете gcd от всех чисел. Если оно получилось непростым, то вытащите из него простые числа.
Можете подробней объяснить, пожалуйста. Похоже реализация простая, но пока не могу понять её.
diagon
Higher
1924 / 1190 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
16.05.2013, 21:41     Записать в файл то простое число, которое есть общим для всех чисел #4
Ну, есть такая вещь как алгоритм Евклида. Рано или поздно вы с ним все равно столкнетесь. Просто погуглите.
Это наиболее оптимальное решение, так как факторизацию вам придется посчитать всего один раз (в самом конце).
edw1n
7 / 7 / 1
Регистрация: 12.11.2012
Сообщений: 114
16.05.2013, 21:47  [ТС]     Записать в файл то простое число, которое есть общим для всех чисел #5
Цитата Сообщение от diagon Посмотреть сообщение
Ну, есть такая вещь как алгоритм Евклида. Рано или поздно вы с ним все равно столкнетесь. Просто погуглите.
Это наиболее оптимальное решение, так как факторизацию вам придется посчитать всего один раз (в самом конце).
Ну с алгоритмом Евклида я немного знаком. То есть нам сначала нужно найти наибольший общий делитель всех чисел, а затем его разложить на простые числа и записать эти простые числа в новый файл ?
diagon
Higher
1924 / 1190 / 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++ Структуры. Записать в файл имена всех студентов, у которых есть оценка 3
C++ Записать в файл KW квадраты всех четных чисел исходного файла, а в файл KB — кубы всех нечетных
Работа с файлами. Найти среднее арифметическое всех чисел и записать его в файл output.txt C++
Задано число. Найти пару чисел с наибольшим общим кратным, которые равны в сумме исходному числу C++
C++ Наибольшее число, которое можно записать в переменную типа int

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

Или воспользуйтесь поиском по форуму:
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     Записать в файл то простое число, которое есть общим для всех чисел
Ответ Создать тему
Опции темы

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