求N以内的所有完数 C语言 看清楚题再回答!!! 请经过测试以后再回答!!!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求N以内的所有完数 C语言 看清楚题再回答!!! 请经过测试以后再回答!!!相关的知识,希望对你有一定的参考价值。

Description

如果一个整数其所有因子(包括1但不包括自己)之和等于它自身,那么这个整数就是一个完数。例如,6是完数,因为 6 = 1+2+3。编写一个函数perfect,用于确定参数number是否是一个完数。在程序中使用这个函数,该程序确定并且打印1 ~ N之间所有的完数。

Input

一个数N (N<=1000)

Output

从小到大打印1 ~ N之间所有的完数,每行一个数。

Sample Input

6
Sample Output

1
6

#include <stdio.h>
int perfect(int);
int main()

int n;
printf("输入上限N:\n");
scanf("%d",&n);
for (int i=1;i<=n;i++)

if (perfect(i))

printf("%d\n",i);


return 0;

int perfect(int a)

int sum=0;
for (int i=1;i<a;i++)

if (a%i==0)

sum+=i;


if (sum==a)

return 1;

else
return 0;


这个程序可以直接用,但是请你注意,1不是完数,因为定义完数的因数中不能包含自己。最小的完数为6
参考技术A #include <iostream>
using namespace std;

int main()

__int64 a[10001];
int i, j;
int t, m, n, num;
memset(a, 0, sizeof(a));
a[1] = 1;
for (i = 1; i <= 5000; i++)

for (j = 2 * i; j <= 10000; j += i)
a[j] += i;

cin >> t;
while (t--)

cin >> m >> n;
if (m > n)
swap(m, n);
num = 0;
for (i = m; i <= n; i++)

if (a[i] == i)
cout << i << endl;




我以前写的,功能是求num1 - num2间的完数个数。如果需要另外放函数- -提出来一段再调用下即可
重复输入部分可以去掉= =第一个t原本代表的是测试组数- -

用c语言求解 输出1-50以内的所有勾股数

参考技术A #include <stdio.h>
void main()
int a,b,c;
for(a=2;a<=48;a++)
for(b=a+1;b<=49;b++)
for(c=b+1;c<=50;c++)
if(a*a+b*b==c*c)
printf("%-4d%-4d%-4d\\n",a,b,c);

参考技术B

# include <stdio.h>

# include <math.h>

#define N 50

int main ()

int a[N],i,j,m,x;

for(m=0,x=1;m<N;m++,x++)

a[m]=x*x;

for(i=1;i<N;i++)

for(j=i+1;j<N;j++)

for(m=0;m<N;m++)

if(i*i+j*j==a[m])

x=sqrt(a[m]);

printf("%d %d %d\\n",i,j,x);break;

return 0;

好不容易用数组做出来,发现早就有人用for做出来了,发出来分享一下吧。


以上是关于求N以内的所有完数 C语言 看清楚题再回答!!! 请经过测试以后再回答!!!的主要内容,如果未能解决你的问题,请参考以下文章

用c语言求1000之内的完数 要求输出完数的因子

c语言:列出完数及其因子

C语言求1000以内完数

用c语言怎样编写n个数以内的完全数的程序

用c语言求解 输出1-50以内的所有勾股数

求水仙花数和完数