如果一个数字等于其适当除数的总和,即等于其正除数的总和(不包括数字本身),则该数字为完美数。编写一个函数来检查给定的数字是否完美。
例子:
Input: n = 15
Output: false
Divisors of 15 are 1, 3 and 5. Sum of
divisors is 9 which is not equal to 15.
Input: n = 6
Output: true
Divisors of 6 are 1, 2 and 3. Sum of
divisors is 6.
一个简单的解决方案是遍历从1到n-1的每个数字,并检查它是否为除数。保持所有除数之和。如果sum等于n,则返回true,否则返回false。
一个有效的解决方案是遍历数字直到n的平方根。如果数字“ i”除以n,则将“ i”和n / i相加。
以下是有效解决方案的实施。
C++
// C++ program to check if a given number is perfect
// or not
#include
using namespace std;
// Returns true if n is perfect
bool isPerfect(long long int n)
{
// To store sum of divisors
long long int sum = 1;
// Find all divisors and add them
for (long long int i=2; i*i<=n; i++)
{
if (n%i==0)
{
if(i*i!=n)
sum = sum + i + n/i;
else
sum=sum+i;
}
}
// If sum of divisors is equal to
// n, then n is a perfect number
if (sum == n && n != 1)
return true;
return false;
}
// Driver program
int main()
{
cout << "Below are all perfect numbers till 10000\n";
for (int n =2; n<10000; n++)
if (isPerfect(n))
cout << n << " is a perfect number\n";
return 0;
}
Java
// Java program to check if a given
// number is perfect or not
class GFG
{
// Returns true if n is perfect
static boolean isPerfect(int n)
{
// To store sum of divisors
int sum = 1;
// Find all divisors and add them
for (int i = 2; i * i <= n; i++)
{
if (n % i==0)
{
if(i * i != n)
sum = sum + i + n / i;
else
sum = sum + i;
}
}
// If sum of divisors is equal to
// n, then n is a perfect number
if (sum == n && n != 1)
return true;
return false;
}
// Driver program
public static void main (String[] args)
{
System.out.println("Below are all perfect" +
"numbers till 10000");
for (int n = 2; n < 10000; n++)
if (isPerfect(n))
System.out.println( n +
" is a perfect number");
}
}
// This code is contributed by mits
Python3
# Python3 code to check if a given
# number is perfect or not
# Returns true if n is perfect
def isPerfect( n ):
# To store sum of divisors
sum = 1
# Find all divisors and add them
i = 2
while i * i <= n:
if n % i == 0:
sum = sum + i + n/i
i += 1
# If sum of divisors is equal to
# n, then n is a perfect number
return (True if sum == n and n!=1 else False)
# Driver program
print("Below are all perfect numbers till 10000")
n = 2
for n in range (10000):
if isPerfect (n):
print(n , " is a perfect number")
# This code is contributed by "Sharad_Bhardwaj".
C#
// C# program to check if a given
// number is perfect or not
class GFG
{
// Returns true if n is perfect
static bool isPerfect(int n)
{
// To store sum of divisors
int sum = 1;
// Find all divisors and add them
for (int i = 2; i * i <= n; i++)
{
if (n % i==0)
{
if(i * i != n)
sum = sum + i + n / i;
else
sum = sum + i;
}
}
// If sum of divisors is equal to
// n, then n is a perfect number
if (sum == n && n != 1)
return true;
return false;
}
// Driver program
static void Main()
{
System.Console.WriteLine("Below are all perfect" +
"numbers till 10000");
for (int n = 2; n < 10000; n++)
if (isPerfect(n))
System.Console.WriteLine( n +
" is a perfect number");
}
}
// This code is contributed by chandan_jnu
PHP
Javascript
输出:
Below are all perfect numbers till 10000
6 is a perfect number
28 is a perfect number
496 is a perfect number
8128 is a perfect number