一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如,6的因子为1、2、3,而
6=1+2+3,因此6是“完数”。编程序找出1000之内的所有完数,并按下面格式输出其因子:
6,its factors are 1,2,3
是很简单的 想这个世纪的这个时候(昨天,我看了你的帖子),现在我想出来了。 现在把代码发出来: #include<iostream> using std::cout; using std::cin; using std::endl; #include<cmath> #define MAX 100 typedef struct lisknode{ int data; struct lisknode *next; }LNode; LNode *L=NULL;//生成合数的连表。 void squality(); bool perfect(int); void Display(); int main() { squality(); Display(); return 0;
} void squality() { int k; LNode *p,*q; for(int i=6;i<=1000;i++) { k=sqrt(i);//只要能整除小于等于其平方根的数就是合数了,否则是质数。 for(int j=2;j<=k;j++)//寻找合数 if(i%j==0) { if(perfect(i)) { p=new LNode; p->data=i; //p->factor=0; p->next=NULL; if(L==NULL) q=L=p; else{ q->next=p; q=p; } } j=k; } } } bool perfect(int x) { int sum=0; for(int j=1;j<=x/2;j++) if(x%j==0) sum+=j; if(sum==x) return 1;//当是完全数时,返回真。 else return 0; } void Display() { LNode *R; int n=0; R=L; while(R) { cout<<R->data<<" 的因子:"; for(int j=1;j<=R->data/2;j++)//一个数只能整除小于等于其本身1/2的数。 if(R->data%j==0) cout<<j<<' '; cout<<endl; R=R->next; } }