Сочтавьте программу, которая проверяет, является ли заданное число совершенным. Совершенным называется натуральное число, равное сумме всех своих делителей (исключая само число) . Пример 28=1+2+4+7+14
Решите, пожалуйста, или киньте ссылку на сайт, где мне помогут. Заранее очень благодарна!!
Другие языки программирования и технологии
Пожалуйста, помогите решить задачку по информатике...
var i,n,sum:integer;
begin
readln(n);
for
for i:=1 to n-1 do
if n mod i=0 then sum:=sum+i;
if sum=n then writeln('ok')
else writeln('error')
end.
begin
readln(n);
for
for i:=1 to n-1 do
if n mod i=0 then sum:=sum+i;
if sum=n then writeln('ok')
else writeln('error')
end.
Для справки, существует формула, открытая ещё Евклидом: всякое совершенное число представимо в виде ( 2^(p-1) )((2^p) - 1)), где p и (2^p) - 1 простые, и наоборот. Кстати, числа вида (2^p) - 1 называются числами Мерсенна. В общем, теоретически задача сводится к поиску простых чисел. Для диапазона Integer (2^32) это пустяковое дело. А так как науке известно всего 46 совершенных чисел, то и искать тут уже нечего, всё нашли до нас. Кстати, в Integer всего пять совершенных чисел: 6, 28, 496, 8128, 33 550 336 - стоит ли вообще писать какую-либо программу на тему 5 чисел? Ясно, что нет, и здесь сгодится любая программа, лишь бы как-нибудь работала.
какой язык?
//все просто, фот функция, которая возвращает тру, если число n совершенное и фолс, если нет
bool isSoverhennoe(int n)
{
int k = 1; //первый делитель
while(k < n)
{
int sum = 0;
if(n%k == 0) //смотрим является ли k делителем для числа
{
sum += k; //если да, то увиливаем сумму на этот делитель
}
k++; //увеличиваем делитель на 1
}
if(sum == n) //смотрим совпадает ли полученная сумма с числом
return truel;
else
return false;
}
bool isSoverhennoe(int n)
{
int k = 1; //первый делитель
while(k < n)
{
int sum = 0;
if(n%k == 0) //смотрим является ли k делителем для числа
{
sum += k; //если да, то увиливаем сумму на этот делитель
}
k++; //увеличиваем делитель на 1
}
if(sum == n) //смотрим совпадает ли полученная сумма с числом
return truel;
else
return false;
}
Вам на каком языке оно надо? Народ сейчас на хтмле напишет.
Yolmyrat Owsikow
ХТМЛ не тьюринг-полный. На сколько мне известно на нем такого рода задачу невозможно решить
не нужно перебирать все числа от 1 до n - 1. Достаточно перебрать числа от 2 до квадратного корня из n либо до n / 2
вот так на C++
#include <iostream>
#include <cmath>
using namespace std;
bool test(int num)
{
if(num < 2)
return false;
int sum = 1, sq = sqrt((double)num);
for(int k = 2; k < sq; k++)
if(num % k == 0)
sum += k + num / k;
if(num % sq == 0)
{
sum += sq;
int temp = num / sq;
if(temp != sq)
sum += temp;
}
return sum == num;
}
int main()
{
int n;
cout << "n = ";
cin >> n;
cout << (test(n) ? "perfect\n" : "not perfect\n");
cin.ignore();
cin.get();
return 0;
}
вот так на C++
#include <iostream>
#include <cmath>
using namespace std;
bool test(int num)
{
if(num < 2)
return false;
int sum = 1, sq = sqrt((double)num);
for(int k = 2; k < sq; k++)
if(num % k == 0)
sum += k + num / k;
if(num % sq == 0)
{
sum += sq;
int temp = num / sq;
if(temp != sq)
sum += temp;
}
return sum == num;
}
int main()
{
int n;
cout << "n = ";
cin >> n;
cout << (test(n) ? "perfect\n" : "not perfect\n");
cin.ignore();
cin.get();
return 0;
}
var i,n,k:integer;
begin
writeln ('введите n');
readln (n);
k:=0;
for i:=1 to n-1 do
if n mod i=0 then
k:=k+i;
if k=n then
writeln ('число совершенное');
else writeln ('не совершенное');
readln;
end.
begin
writeln ('введите n');
readln (n);
k:=0;
for i:=1 to n-1 do
if n mod i=0 then
k:=k+i;
if k=n then
writeln ('число совершенное');
else writeln ('не совершенное');
readln;
end.
Похожие вопросы
- помогите решить задачку по информатике
- Помогите решить задачку по информатике!
- помогите решить задачку по информатике на паскале. найти минимальный и максимальный элемент двухмерного массива
- Помогите решить задачку по информатике!
- Помогите решить задачку простенькую.
- Объясните, пожалуйста, как решить задачу по информатике...
- помогите решить задачку, на VBA для Excel
- Помогите решить задачку на С++,пожалуйста!
- Кто разбирается в программировании? помогите решить задачку!
- Помогите решить задачу по информатике 10 класс
что значит смотрим является ли k делителем для числа?