
C/C++
Нужна помощь с написанием кода на языке "С"
Помогите пожалуйста


На чистом Си за время 0(√Х):
#include <stdio.h>
#include <math.h>
using namespace std;
int main()
{
unsigned long long X, s;
unsigned long l, m;
for (;;)
{
s = 1;
printf("X » ");
scanf("%llu", &X);
m = (int)sqrt(n + 1.);
for (l = 2; l <= m; l++)
if (n % l == 0) s += l + X / l;
if (m * m == X) s -= m;
if (s == X) printf("yes\n");
else printf("no\n");
}
}
А с каких это пор совершенные числа называются полными? Да, между прочим, я тут, слегка покопавшись в Инете, нашла примеры кодов для поиска совершенных чисел или проверку введённых чисел на совершенность, так вот - ну и ерунда же мне всё там попалась! ʘ‿ʘ А если там и есть что-то хорошее, то мне оно почему-то не подвернулось, так что пришлось даже свою программу писа́ть, но в ней ещё столько всего надо оптимизировать! А самое простое - это взять все известные совершенные числа, которые можно "запихнуть" в стандартный для Си беззнаковый восьмибайтный целый тип unsigned long long, сделать из них массив из восьми элементов и проверять есть ли введённое число в этом массиве или нет. Это будет даже не за время О (√Х), а мгновенно! Вот этот массив: { 6, 28, 496, 8128, 33550336, 8589869056, 137438691328, 2305843008139952128 }
Последнее число у меня на фаблете Самсунг Гэлекси проверялось на простоту программой, которая выше, целых 338 секунд, что, конечно, может быть, и приемлемое время, но всё равно как-то долго, поэтому я и говорю, что надо ещё долго доводить код до кондиции, то есть оптимизировать по времени его исполнения, а пока и так сойдёт! У Ивана тоже для расширенного Си сегмент в принципе вполне рабочий.. (•‿•)
#include <stdio.h>
#include <math.h>
using namespace std;
int main()
{
unsigned long long X, s;
unsigned long l, m;
for (;;)
{
s = 1;
printf("X » ");
scanf("%llu", &X);
m = (int)sqrt(n + 1.);
for (l = 2; l <= m; l++)
if (n % l == 0) s += l + X / l;
if (m * m == X) s -= m;
if (s == X) printf("yes\n");
else printf("no\n");
}
}
А с каких это пор совершенные числа называются полными? Да, между прочим, я тут, слегка покопавшись в Инете, нашла примеры кодов для поиска совершенных чисел или проверку введённых чисел на совершенность, так вот - ну и ерунда же мне всё там попалась! ʘ‿ʘ А если там и есть что-то хорошее, то мне оно почему-то не подвернулось, так что пришлось даже свою программу писа́ть, но в ней ещё столько всего надо оптимизировать! А самое простое - это взять все известные совершенные числа, которые можно "запихнуть" в стандартный для Си беззнаковый восьмибайтный целый тип unsigned long long, сделать из них массив из восьми элементов и проверять есть ли введённое число в этом массиве или нет. Это будет даже не за время О (√Х), а мгновенно! Вот этот массив: { 6, 28, 496, 8128, 33550336, 8589869056, 137438691328, 2305843008139952128 }
Последнее число у меня на фаблете Самсунг Гэлекси проверялось на простоту программой, которая выше, целых 338 секунд, что, конечно, может быть, и приемлемое время, но всё равно как-то долго, поэтому я и говорю, что надо ещё долго доводить код до кондиции, то есть оптимизировать по времени его исполнения, а пока и так сойдёт! У Ивана тоже для расширенного Си сегмент в принципе вполне рабочий.. (•‿•)
Примерно так
cin>>x;int s=1;for(i=2;i<x;i++)if(x%i==0)s+=i;if(s==x)cout<<"Yes";
cin>>x;int s=1;for(i=2;i<x;i++)if(x%i==0)s+=i;if(s==x)cout<<"Yes";
Andrey Mirin
Он точно рабочий?
Похожие вопросы
- C++.Нужна помощь в написании кода.
- Нужна помощь в написании кода С++, пожалуйста.(Структуры)
- Помощь в написании кода на C++
- Написать код на языке си
- Очень нужна помощь. нужен код на C. Задачка будет в описании.
- Возникла проблема при написании кода (с++). Помогите пожалуйста.
- Написать код на языке C++
- Написал код для языка C, но работает не правильно
- Написать код на языке Си
- Помогите написать программу по теме "Строки" на языке C.