没有输出(问题在哪是重点)
本帖最后由 一世轻尘 于 2020-12-24 21:50 编辑问题在哪?
求更简便的方法。{:10_256:}
#include<stdio.h>
int f(int x);
void judge();
int main()
{
void judge();
return 0;
}
int f(int x)
{
int k,sum=0;
for(k=0;k<x;k++)
{
if(x%k==0)
{
sum=sum+k;
}
}
return sum;
}
void judge()
{
int i,j;
for(i=1;i<501;i++)
{
for(j=1;j<501;j++)
{
if(f(i)==j&&f(j)==i)
{
printf("%d %d\n",i,j);
}
}
}
}
本帖最后由 jackz007 于 2020-12-24 21:14 编辑
#include <stdio.h>
int sum(int n)
{
int k , s ;
for(s = 1 , k = 2 ; k < n ; k ++) if(! (n % k)) s += k ;
return s ;
}
main(void)
{
int a , c , k , m ;
for(c = 0 , k = 0 ; k < 501 ; k ++) {
if(k > 1) {
a = sum(k) ;
if(sum(a) == k) {
c ++ ;
printf("%3d\t%3d\n" , k , a) ;
if(a > k) k = a ;
}
}
}
if(! c) printf("指定范围没有友好数。\n") ;
}
编译、运行实况
D:\00.Excise\C>g++ -o x x.c
D:\00.Excise\C>x
6 6
28 28
220 284
496 496
D:\00.Excise\C> 没有输出的问题,可能是第12行错误,k 不能从 0 开始呀,因为下面的判断是 x % k ,它相当于 x / k 风过无痕1989 发表于 2020-12-24 21:57
没有输出的问题,可能是第12行错误,k 不能从 0 开始呀,因为下面的判断是 x % k ,它相当于 x / k
还是不行 我还是将我的发出来吧
#include<stdio.h>
int main()
{
int a, i, b, n;
for (a = 1; a < 501; a++) // 穷举500以内的全部整数
{
for (b = 0, i = 1; i <= a / 2; i++)// 计算数a的各因子,各因子之和存放于b
if (!(a%i))
b += i;
for (n = 0, i = 1; i <= b / 2; i++)// 计算b的各因子,各因子之和存于n
if (!(b%i))
n += i;
if (n == a && a<b) // 使每对亲密数只输出一次
printf("%4d<-->%4d \n", a, b); // 若n=a,则a和b是一对亲密数,输出
}
return 0;
} 风过无痕1989 发表于 2020-12-24 22:17
我还是将我的发出来吧
他这个和一般的整除问题不一样,不知只有小于a/2的因子才算,大于的也要加上 一世轻尘 发表于 2020-12-24 22:21
他这个和一般的整除问题不一样,不知只有小于a/2的因子才算,大于的也要加上
这个亲密数对比较稀少,5000以内也就只有三对:
220 <--> 284
1184 <--> 1210
2620 <--> 2924 风过无痕1989 发表于 2020-12-24 22:26
这个亲密数对比较稀少,5000以内也就只有三对:
220284
11841210
啊擦,找到问题了,main里的不用加void,那个不用加i!=j的,我看错题了 一世轻尘 发表于 2020-12-24 22:56
啊擦,找到问题了,main里的不用加void,那个不用加i!=j的,我看错题了
呵呵~~为了达到你的更简便,我花了半个小时,将能省的变量都省了,直接用 b 来记录因子和
页:
[1]