|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
题目是这样子的:
计算亲密数对,若a,b为1对亲密数,则a的因子和等于b,b的因子和等于a, 且a不等于b。 如220、284是1对亲密数, 284,220也是1对亲密数。程序要求在6至5000内找出所有的亲密数对,并对每对亲密数用格式"%6d,%6d\n"输出。
答案给的代码是这样子的:
- #include<stdio.h>
- int main()
- {
- int a,b,c,k;
- for(a=6;a<=5000;a++)
- {
- for(k=1,b=0;k<=a/2;k++)
- if(a%k==0) b+=k;
- for(k=1,c=0;k<=b/2;k++)
- if(b%k==0) c+=k;
- if(a==c&&a!=b)
- printf("%6d,%6d\n",a,b);
- }
- return 0;
- }
复制代码
老实说,那个b和c可以从5开始嘛,从0开始会不会不太好
本帖最后由 skyddy 于 2020-5-24 19:06 编辑
不能为5吧 b和c表示因子的和 每次大循环因子的和要置为0 重新计算的
我写的烂方法
- int a, b;
- int divide;
- int sum;
- for (a = 6; a <= 5000; ++a) {
- sum = 0;
- for (int j = 1; j <= sqrt(a); ++j) {
- if (a % j == 0) {
- if (j != 1) {
- divide = a / j;
- } else {
- divide = 0;
- }
- sum += (j + divide);
- }
- }
- b = sum;
- sum = 0;
- for (int k = 1; k <= sqrt(b); ++k) {
- if (b % k == 0) {
- if (k != 1) {
- divide = b / k;
- } else {
- divide = 0;
- }
- sum += (k + divide);
- }
- }
- if (sum == a && a != b) {
- printf("%6d,%6d\n", a, b);
- }
- }
- return 0;
复制代码
|
|