【发布时间】:2015-02-01 20:58:12
【问题描述】:
首先定义:一对友好的数字由两个不同的整数组成,其中 第一个整数的除数之和等于第二个整数,并且 第二个整数的除数之和等于第一个整数。完美数是等于其自身除数之和的数。
我想做的是制作一个程序,询问用户一个下限和一个上限,然后向他/她展示这两个限制之间的所有友好对(每行一个)。如果有一个完美的数字,则只需要打印一个数字(在这种情况下不是一对)。
整个想法让我很困惑,所以我正在寻求帮助。
这是我必须开始的,我知道 sumDivisors() 应该或多或少正确,但 main() 只是检查两个输入的数字是否友好 - 可能需要对此进行彻底检查因为我想要两个给定限制之间的所有对。
long sumDivisors(long a)
{
long s=0,i;
for(i=1;i<=a/2;i++)
{
if(a%i==0)
{
s+=i;
}
}
return s;
}
int main()
{
long t,n,s1;
scanf("%ld",&t);
while(t--)
{
scanf("%ld",&n);
s1=sumDivisors(n);
if(n==sumDivisors(s1))
{
printf("Yes\n");
}
else printf("No\n");
}
return 0;
}
【问题讨论】:
-
我认为任何时候你的家庭作业涉及你不熟悉的数学,你应该查看维基百科。这是快速了解en.wikipedia.org/wiki/Amicable_numbers 概念的好方法。请特别注意文章中的示例,这些示例应该可以帮助您解决范围问题。
-
这实际上是我从中得到定义的地方,尽管仍然坚持如何将它实际用作一个范围而不是使用两个数字来检查。