|
30鱼币
附上题目要求以及自己的问题程序
- 2500年前数学大师毕达哥拉斯就发现,220与284两数之间存在着奇妙的联系:
- 220的真因数之和为:1+2+4+5+10+11+20+22+44+55+110=284
- 284的真因数之和为:1+2+4+71+142=220
- 毕达哥拉斯吧这样的数对A,B称为相亲数:A的真因数之和为B,而B的真因数之和为A。设计程序求4位以内的相亲数。
- **输出格式要求:"相亲数:%d,%d\n" "%d 的真因数之和为:%d" "+%d" "=%d\n"
- 程序运行示例如下:
- 相亲数:220,284
- 220 的真因数之和为:1+2+4+5+10+11+20+22+44+55+110=284
- 284 的真因数之和为:1+2+4+71+142=220
- 相亲数:1184,1210
- 1184 的真因数之和为:1+2+4+8+16+32+37+74+148+296+592=1210
- 1210 的真因数之和为:1+2+5+10+11+22+55+110+121+242+605=1184
- 相亲数:2620,2924
- 2620 的真因数之和为:1+2+4+5+10+20+131+262+524+655+1310=2924
- 2924 的真因数之和为:1+2+4+17+34+43+68+86+172+731+1462=2620
- 相亲数:5020,5564
- 5020 的真因数之和为:1+2+4+5+10+20+251+502+1004+1255+2510=5564
- 5564 的真因数之和为:1+2+4+13+26+52+107+214+428+1391+2782=5020
- 相亲数:6232,6368
- 6232 的真因数之和为:1+2+4+8+19+38+41+76+82+152+164+328+779+1558+3116=6368
- 6368 的真因数之和为:1+2+4+8+16+32+199+398+796+1592+3184=6232
复制代码
- #include <stdio.h>
- /* 相亲数枚举,四位以内,并列出因数和的计算式
- 定义:两数所有因数之和恰等于彼此*/
- int factor(int a) //factor函数,对参数a进行求和,返回所求和fsum
- {
- int fi = 1, fsum = 0;
- while(fi < a)
- {
- if(a / fi == 0) fsum = fsum + fi;
- }
- return fsum;
- }
- void pfactor(int a) //pfactor函数,按照题目格式输出真因数求和计算表达式
- {
- printf("%d 的真因数之和为:");
- int i = 1, sum = 0;
- while(i < a)
- {
- if(a / i == 0)
- {
- printf("%d", i);
- sum = sum + i;
- }
- }
- printf("=%d\n", sum);
- }
- int main()
- {
- int n = 1, sum = 0;
- while(n < 10000)
- {
- sum = factor(n);
- if (factor(sum) == n) //两次factor函数后与本身等,n和sum为相亲数
- {
- printf("相亲数:%d,%d\n", sum, n);
- pfactor(n);
- pfactor(sum);
- }
- n++;
- }
- return 0;
- }
复制代码
供参考:
- #include <stdio.h>
- /* 相亲数枚举,四位以内,并列出因数和的计算式
- 定义:两数所有因数之和恰等于彼此*/
- int factor(int a) //factor函数,对参数a进行求和,返回所求和fsum
- {
- int fi = 1, fsum = 0;
- while(fi < a)
- {
- // if(a / fi == 0) fsum = fsum + fi;
- if(a % fi == 0) fsum = fsum + fi; // 整除
- fi++; // 否则死循环
- }
- return fsum;
- }
- void pfactor(int a) //pfactor函数,按照题目格式输出真因数求和计算表达式
- {
- // printf("%d 的真因数之和为:");
- printf("%d 的真因数之和为:", a); // 少了变量
- int i = 1, sum = 0;
- printf("1");
- while(i < a)
- {
- // if(a / i == 0)
- if(a % i == 0) // 整除
- {
- // printf("%d", i);
- if (i!=1) {
- printf("+%d", i);
- }
- sum = sum + i;
- }
- i++; // 否则死循环
- }
- printf("=%d\n", sum);
- }
- int main()
- {
- int n = 1, sum = 0;
- while(n < 10000)
- {
- sum = factor(n);
- // if (factor(sum) == n) //两次factor函数后与本身等,n和sum为相亲数
- if (sum>n && factor(sum) == n) //两次factor函数后与本身等,n和sum为相亲数
- {
- // printf("相亲数:%d,%d\n", sum, n);
- printf("相亲数:%d,%d\n", n, sum); // 换位置符合题目顺序
- pfactor(n);
- pfactor(sum);
- }
- n++;
- }
- return 0;
- }
复制代码
|
|