Не могу решить, выводит segmentation fault | Sololearn: Learn to code for FREE!
New course! Every coder should learn Generative AI!
Try a free lesson
0

Не могу решить, выводит segmentation fault

Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [174457; 174505], числа, имеющие ровно два различных натуральных делителя, не считая единицы и самого числа. Для каждого найденного числа запишите эти два делителя в две соседних столбца на экране с новой строки в порядке возрастания произведения этих двух делителей. Делители в строке также должны следовать в порядке возрастания. #include<iostream> #include<cstring> using namespace std; int main() {int a[10000000],b,c,d,e,f,g,i; a[0]=174456; d=174457; e=174505; for(i=1;i<=48;i++)a[i]=a[i-1]+1; for(b=1;b<=(e-1)/2;b++) for(c=1;c<=(e-1)/2;c++) for(i=1;i<=48;i++) if ((a[i]%b==0)&&(a[i]%c==0)&&(b!=c)&&(c!=e)&&(b!=e)&&(c!=d)&&(b!=d)&&(c!=1)&&(b!=1)) cout<<b<<" "<<c; } Можете указать ошибки? И по возможности изменённую версию

15th Oct 2020, 7:55 AM
виталий горохов
виталий горохов - avatar
4 Answers
0
#include <iostream> #define START 174457 #define END 174505 #define MAX_LENGTH END - START + 1 using namespace std; int isNumberMeetRequirements(int number) { int naturalDividersCount = 0; for (int i = 2; i < number; i++) { if (number % i == 0) { naturalDividersCount++; if (naturalDividersCount > 2) { return 0; } } } return naturalDividersCount == 2; } int getNaturalDivider(int number) { // Возвращает первый натуральный делитель. Так как нам нужны числа с 2 делителями, мы можем найти один из них этой функцией и по нему вычислить второй for (int i = 2; i < number; i++) { if (number % i == 0) { return i; } } return -1; } int main() { int length = 0, result[MAX_LENGTH] = {0}; for (int i = START; i <= END; i++) { if (isNumberMeetRequirements(i)) { result[length++] = i; } } for (int i = 0; i < length; i++) { int divider = getNaturalDivider(result[i]); cout << divider << " " << result[i] / divider << endl; } }
17th Oct 2020, 5:20 AM
R-G-B
R-G-B - avatar
+ 1
1. Используйте такие имена для переменных, которые наглядно показывали бы, что они хранят. 2. Форматируйте код так, чтобы он легко читался. Нашёл пост на Хабре на эту тему: https://m.habr.com/ru/post/172091/ 3. Чем очевиднее и прямее алгоритм, тем легче его понять. Соответственно, тем легче его редактировать и искать в нём ошибки. ИМХО Ваш алгоритм сложный для понимания.
17th Oct 2020, 5:35 AM
R-G-B
R-G-B - avatar
0
Думал моя программа яснее некуда(
17th Oct 2020, 6:30 AM
виталий горохов
виталий горохов - avatar
0
Это, скорее всего, потому, что вы привыкли писать так.
17th Oct 2020, 6:39 AM
R-G-B
R-G-B - avatar