vf代码找出1000以内的10个最大的完数
发布网友
发布时间:2022-05-21 23:28
我来回答
共2个回答
热心网友
时间:2023-11-18 11:33
完数,即完美数,一个数如果恰好等于除它本身外的因子之和,这个数就称为完数。
1000以内所有完数
C语言代码:
#include <stdio.h>
/**CopyRight@fantasy0707*/
#define N 1000 //完数求解范围
main()
{
int i,j,sum; //sum用来存放因子之和
for(i=1;i<N;i++) //对1到1000以内的数依次尝试
{
sum=0; //给sum赋值,同时也是对上一次的值清空
for(j=1;j<=i/2;j++) //查找因子
{
if(i%j==0) // 如果是因子
{
sum+=j; //把当前的因子累加到sum中
}
}
if(sum==i) //判断是不是完数,即因子之和等于自身
{
printf("%-5d its factors are: ",i); //是完数,输出
for(j=1;j<=i/2;j++) //再次找出这个完数的因子
{
if(i%j==0) //输出各个因子
printf("%d,",j);
}
printf("\n");
}
}
}
热心网友
时间:2023-11-18 11:34
DIME A(1000)
FOR I = 1 TO 1000
M = I
S = 0
K = 1
J = 1
DO WHILE J<M
IF M % J = 0
S = S + J
A(K) = J
K = K + 1
ENDIF
J = J + 1
ENDDO
IF S != 0 AND S = M
J = 1
? '因子是:’
DO WHILE J < K
?? A( J ) , ' '
J = J + 1
ENDDO
? '完数是' , I
?
ENDIF
ENDFOR
在代码段从上向下看,则A是数组(数据集合),i是循环变量,m是从循环变量中依次取数用于和 j 做比较——m相当于以步长为1从1到1000、j相当于自我按照步长1来累计相加在1到1000之间(在第一个DO循环段里),s是把能够被M整除的 j 累加起来、然后如果s累加值等于m则s或m都是完数,k用于为把完数中的因子提取出来提供条件,j是因子数组的下标,当i=s=m时、i也是完数。