一个数如果恰好等于它的因子之和,这个数就称为“完数。例如6=1+2+3.编程找出1000以内的所有完数。
1
#import <Foundation/Foundation.h>
//
C语言这个地方是#include<stdio.h>
2
3 int main( int argc, const char * argv[]) {
4 @autoreleasepool {
5 int zhi= 0,i= 1,ax= 0;
6 int nu[ 50]={};
7 while (i< 1000) {
8 for ( int j= 1; j<=i/ 2; j++) {
9 if (!(i%j)) { // 能整除执行
10 // printf("%d ",j);
11 zhi+=j;
12 if (zhi==i&&j>=i/ 2) { // 如果i是偶数判断到i/2
13 // printf("这个数%d是完数,计算的和是:%d\n",i,zhi);
14 nu[ax]=i;
15 ax++;
16 }
17 }
18 if (i% 2== 0&&j>=i/ 2) { // 如果是奇数判断到(i-1)/2
19 zhi= 0; // printf("j已经大于i的一半了0000:i===%d\n",i);
20 }
21 if (i% 2!= 0&&j>=(i- 1)/ 2) {
22 zhi= 0; // printf("j已经大于i的一半了1111:i===%d\n",i);
23 printf( " \n ");
24 }
25 }
26 i++;
27
28 }
29 printf( " 1到1000以内的完数分别是: ");
30 for ( int i= 0; nu[i]!= 0; i++) {
31 printf( " %d、 ",nu[i]);
32 }
33 }
34 return 0;
35 }
2
3 int main( int argc, const char * argv[]) {
4 @autoreleasepool {
5 int zhi= 0,i= 1,ax= 0;
6 int nu[ 50]={};
7 while (i< 1000) {
8 for ( int j= 1; j<=i/ 2; j++) {
9 if (!(i%j)) { // 能整除执行
10 // printf("%d ",j);
11 zhi+=j;
12 if (zhi==i&&j>=i/ 2) { // 如果i是偶数判断到i/2
13 // printf("这个数%d是完数,计算的和是:%d\n",i,zhi);
14 nu[ax]=i;
15 ax++;
16 }
17 }
18 if (i% 2== 0&&j>=i/ 2) { // 如果是奇数判断到(i-1)/2
19 zhi= 0; // printf("j已经大于i的一半了0000:i===%d\n",i);
20 }
21 if (i% 2!= 0&&j>=(i- 1)/ 2) {
22 zhi= 0; // printf("j已经大于i的一半了1111:i===%d\n",i);
23 printf( " \n ");
24 }
25 }
26 i++;
27
28 }
29 printf( " 1到1000以内的完数分别是: ");
30 for ( int i= 0; nu[i]!= 0; i++) {
31 printf( " %d、 ",nu[i]);
32 }
33 }
34 return 0;
35 }
执行结果: