Our Blog

Совершенные числа

Ранее давался код на Паскале для нахождения всех простых чисел от 1 до n, но этот код написан на C++ и гораздо быстрее работает. Суть самой программы:
Говорят, что целое число является совершенным, если его делители, включая 1 (но не само число) в сумме дают это число. Например, 6 — совершенное число, так как 6 = 1 + 2 + 3. Требуется написать функцию perfect, которая определяет, является ли ее параметр number совершенным числом. Затем использовать эту функцию в программе, которая определяет и печатает все совершенные числа в диапазоне от 1 до 1000. Напечатать сомножители каждого совершенного числа, чтобы убедиться, что число, действительно, совершенное.

include <iostream>
using namespace std;
bool perfect(int num){
    int sum=0;
    for(int i=1;i<=num/2;i++)
        if(num%i==0)
            sum+=i;
    if(sum==num)
        return 1;
    return 0;
}
void main(){
    setlocale(LC_ALL,"Russian");
    for(int i=1;i<=1000;i++)
        if(perfect(i)){
            cout<<i<<", сомножители:";
            for(int j=1;j<=i/2;j++){//печатаем сомножители
                if(i%j==0)
                    cout<<" "<

Еще вариант:

#include "stdafx.h"
#include <iostream>

int sumd (int a) { //сумма делителей числа a
	int sum=0;
	for (int i=1; i<a/2+1; i++) if (a%i==0) sum+=i;
	return sum;
}

bool perfect (int a) {
	if (sumd(a)==a) return true;
	return false;
}

void printd (int a) {
	for (int i=2; i<a/2+1; i++) if (a%i==0) std::cout << "+"<<i;
}
int main () {
	for (int i=2; i<=1000; i++) if (perfect(i)) {
		std::cout<<i<<": ";
		std::cout << "1";
		printd(i);
		std::cout << "\n";
	}
	return 0;
}
Comments ( 0 )
    -->