Să se determine toate numerele ”perfecte” mai mici decât 10000.
Analiza Programului
Un număr este perfect dacă este egal cu suma tuturor divizorilor săi (inclusiv 1).
Rezolvarea in C#
using System; namespace PerfectNumber { class Program { static void Main(string[] args) { for (int number = 0; number < 10000; number++) { if (CheckPerfectNumber(number)) Console.WriteLine("{0} este numar perfect", number); } Console.Read(); } static bool CheckPerfectNumber(int number) { int sum = 0; //aflam toti divizorii pentru un numar si calculam suma lor for (int i = 1; i <= number / 2; i++) if (number % i == 0) sum += i; // este numar perfect if (sum == number) return true; return false; } } }
Rezolvarea in C++
//the header conio, which include library functions for performing "console input and output" #include <conio.h> //the header iostream, which supports the C++ I/O system #include <iostream> //tells the compiler to use the std namespace using namespace std; //return true if number is perfect number bool CheckPerfectNumber(int number) { int sum = 0; for (int i = 1; i <= number / 2; i++) if (number % i == 0) sum += i; if (sum == number) return true; return false; } //begin program execution int main() { for(int number = 0; number < 10000; number++) { if(CheckPerfectNumber(number) == true) cout<<number<<" este numar perfect"<<endl; } return 0; }
Category: Uncategorized
Mihai says:
Ti le spun eu din prima :))
6, 28, 496, 8128
Lista cu nr. perfecte aici: http://en.wikipedia.org/wiki/List_of_perfect_numbers
Astel de programe pot spune ca-s useless avand in vedere ca daca folosim valori pentru unsigned long long vom gasi doar 8 numere perfecte.
Nu am dreptate ?