求100以内的完全数,查找100以内所有的完数

首页 > 教育培训 > 作者:YD1662023-05-21 23:24:50

题目要求:

如果一个数恰好等于它的因子之和,那么这个数就被称为完全数。例如6的因子为1,2,3,而6=1 2 3,因此6是一个完全数。求出1000以内的完全数。

题目分析:

本题最为直接的解法就是利用穷举法在1~1000以内判断每个数是否是完全数,如果是完全数就输出之。问题的关键就是如何判断一个数a是否是完全数。它要分为两个步骤完成:

(1)求出a的所有因子a1,a2…an的和sum;

(2)判断a1 a2 … an的和sum是否等于a,如果sum等于a则a是完全数,否则a不是完全数。

#include"stdio.h" #define max 100 Perm(int a[], int n ,int s ,int r[], int m){ int i,j,k,flag=0; int b[max]; /*数组b存放子序列*/ for(i=0;i<n;i ){ flag = 1; r[s] = a[i]; /*复制数列a中第i个元素到数组r*/ j = 0; for(k=0;k<n;k ) /*产生子序列b*/ if(i != k){ b[j] = a[k]; j ; } Perm(b,n-1,s 1,r,m); /*全排列子序列b*/ } if(flag == 0){ /*得到一种排列结果*/ printf("\n"); for(k=0;k<m;k ) printf("%d",r[k]); /*输出存放排列结果的数组r中的内容*/ printf("\n"); } } main() { int a[max] , r[max]; int i,n; printf("Please input the number of digit inthe array\n"); scanf("%d",&n); /*输入待排列的数列中元素的个数*/ printf("Please input a string for array\n"); for(i=0;i<n;i ) /*输入数列中的元素(整数)*/ scanf("%d",&a[i]); Perm(a,n,0,r,n); /*全排列操作*/ getche();

运行结果:

求100以内的完全数,查找100以内所有的完数(1)

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.