1.
#define M 1000 /*定义寻找范围*/
#include <stdio.h>
int main()
{
int k1,k2,k3,k4,k5,k6,k7,k8,k9,k10;
int i,a,n,s;
for (a=2;a<=M;a++) /* a是2-1000之间的整数,检查它是否完数 */
{n=0; /* n用来累计a的因子的个数 */
s=a; /* s用来存放尚未求出的因子之和,开始时等于a */
for (i=1;i<a;i++) /* 检查i是否a的因子 */
if (a%i==0) /* 如果i是a的因子 */
{n++; /* n加1,表示新找到一个因子 */
s=s-i; /* s减去已找到的因子,s的新值是尚未求出的因子之和 */
switch(n) /* 将找到的因子赋给k1...k9,或k10 */
{case 1:
k1=i; break; /* 找出的笫1个因子赋给k1 */
case 2:
k2=i; break; /* 找出的笫2个因子赋给k2 */
case 3:
k3=i; break; /* 找出的笫3个因子赋给k3 */
case 4:
k4=i; break; /* 找出的笫4个因子赋给k4 */
case 5:
k5=i; break; /* 找出的笫5个因子赋给k5 */
case 6:
k6=i; break; /* 找出的笫6个因子赋给k6 */
case 7:
k7=i; break; /* 找出的笫7个因子赋给k7 */
case 8:
k8=i; break; /* 找出的笫8个因子赋给k8 */
case 9:
k9=i; break; /*找出的笫9个因子赋给k9 */
case 10:
k10=i; break; /* 找出的笫10个因子赋给k10 */
}
}
if (s==0)
{
printf("%d ,Its factors are ",a);
if (n>1) printf("%d,%d",k1,k2); /* n>1表示a至少有2个因子 */
if (n>2) printf(",%d",k3); /* n>2表示至少有3个因子,故应再输出一个因子 */
if (n>3) printf(",%d",k4); /* n>3表示至少有4个因子,故应再输出一个因子 */
if (n>4) printf(",%d",k5); /* 以下类似 */
if (n>5) printf(",%d",k6);
if (n>6) printf(",%d",k7);
if (n>7) printf(",%d",k8);
if (n>8) printf(",%d",k9);
if (n>9) printf(",%d",k10);
printf("\n");
}
}
return 0;
}
//感觉这个代码。。。好麻烦。。。
2.
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cmath>
#include<iomanip>
#include<cstring>
using namespace std;
int main()
{
int n,s;
for(n=1; n<1000; n++){
s=0;
for(int i=1; i<n; i++){
if(n%i==0) s+=i;
}
if(s==n) {
printf("%d its factors are ", n);
for(int i=1; i<n; i++){
if(n%i==0) printf("%d ",i);
}
printf("\n");
}
}
return 0;
}
求1000以内的完数(一个数恰好等于她的因子之和 eg. 6=1+2+3, 6是完数)
最新推荐文章于 2024-06-06 10:45:38 发布