题目
一个数的因子为:除自己本身外,能被整除的所有数,比如6的因子为:1,2,3.如果一个数X的所有因子的和,恰好等于另一个数Y,而Y的所有因子的和恰好等于X,则X和Y 为一对亲和数。
案例输入:n表示有n组数字,之后紧跟着n组两个数X,Y;
要求输出从X到Y的最小亲和数。
想法
1.感觉因子有点眼熟,那 我就除着算,但是不用都算,算到X开根号就行了吧(错误的,到N/2就ok)
2.不知道捏,感觉会超时,故事奇怪起来了,我先试试
一些没有成功的办法
关于我大概脑子抽了 我觉得每次都算很慢,所以我打算整个数组存储算过的,但我是真的不行,反正报错了
后面我又想 那就暴力
#include<stdio.h>
#include<math.h>
int yinzi(int number){
int sum=0;
for(int i=1;i<=number/2;i++){
if(number%i==0){
sum= sum+i;
}
}
return sum;
}
int main(){
int n,X,Y,len;
scanf("%d",&n);
for(int i=0;i<n;i++){
**int j;**
//j提前定义是为了下面printf no 可以判断 如果写在for里 会报错,我真的很笨 我不知道这个事,所以我报错了
scanf("%d%d",&X,&Y);
for(j=X;j<=Y;j++){
int sum1,sum2;
sum1=yinzi(j);
sum2=yinzi(sum1);
//这边的限定条件,一个都不能少
if(**sum1>=X&&sum2==j&&sum1<=Y&&sum1!=sum2**) {
printf("%d %d\n",sum2,sum1);
break;}
}
if(j>Y) printf("No\n");
}
return 0;
}
但是我有个疑问,我是输入一组输出一个答案 这样行吗?
哭泣,我觉得这个代码就主要考C 讲真的 别想着搞花样
如果事先把数字保存可以实现全输入完再算,我有学到