اعداد کامل
در نظریه اعداد، عدد کامل، یک عدد صحیح مثبت است که برابر با مجموع مقسومعلیههای سرهٔ مثبت خود (همهٔ مقسومعلیههای مثبتش غیر از خود عدد) باشد. همچنین به طور هم ارز، یک عدد کامل، عددی است که نصف مجموع همهٔ مقسومعلیههای مثبت خود باشد. (ویکی پدیا)
نخستین عدد کامل ۶ است. زیرا ۱+۲+۳=۶ یا به طور هم ارز، ۶=۲ / (۱+۲+۳+۶). بعد از آن ۲۸ و بعد از آن به ترتیب ۴۹۶ و ۸۱۲۸ قرار دارند.
الگوریتم کلی اعداد اول:
Function IsPerfectNumber (Num) As Boolean
SumOfDivisors <-- 1
Counter <-- 2
MaxCounter <-- Num / 2
while Counter <= MaxCounter do
if Num mod Counter = 0 then
SumOfDivisors <-- SumOfDivisors + Counter
if SumOfDivisors > Num then
return false
Counter <-- Counter + 1
if SumOfDivisors = Num then
return true
return false
C++, C#
bool IsPerfectNumber(long Num)
{
long SumOfDivisors = 1;
long Counter = 2;
long MaxCounter = Num / 2;
while (Counter <= MaxCounter)
{
if (Num % Counter == 0)
SumOfDivisors += Counter;
if (SumOfDivisors > Num)
return false;
Counter++;
}
if (SumOfDivisors == Num)
return true;
return false;
}
VB.NET
Function IsPerfectNumber(ByVal Num As Long) As Boolean
Dim SumOfDivisors As Long = 1
Dim Counter As Long = 2
Dim MaxCounter As Long = Num / 2
While (Counter <= MaxCounter)
If Num Mod Counter = 0 Then SumOfDivisors += Counter
If SumOfDivisors > Num Then Return False
Counter += 1
End While
If SumOfDivisors = Num Then Return True
Return False
End Function
Python
def IsPerfectNumber(Num):
SumOfDivisors = 1
Counter = 2
MaxCounter = Num / 2
while Counter <= MaxCounter:
if Num % Counter == 0:
SumOfDivisors += Counter
if SumOfDivisors > Num:
return False
Counter += 1
if SumOfDivisors == Num:
return True
return False
F#
let IsPerfectNumber(Num : int64) : bool =
let mutable SumOfDivisors : int64 = 1L
let mutable Counter : int64 = 2L
let MaxCounter : int64 = Num / 2L
let mutable rv : bool = false
while Counter <= MaxCounter do
if Num % Counter = 0L then
SumOfDivisors <- SumOfDivisors + Counter
if SumOfDivisors > Num then
Counter <- MaxCounter
Counter <- Counter + 1L
if SumOfDivisors = Num then
rv <- true
rv
دانلود سورس کدها: