C-找到极限之间的所有友好数字

C-找到极限之间的所有友好数字,c,range,limit,C,Range,Limit,首先是一个定义:一对友好的数由两个不同的整数组成,其中 第一个整数的除数之和等于第二个整数,并且 第二个整数的除数之和等于第一个整数。完美数是一个等于其自身除数之和的数 我想做的是制作一个程序,要求用户提供一个下限和一个上限,然后向他/她提供这两个限制之间的所有友好配对(每行一对)。如果有一个完美的数字,则只需打印一个数字(不是一对) 整个想法让我很困惑,所以我正在寻求帮助 这是我必须开始的,我知道sumDivisors()应该或多或少是正确的,但main()只是检查两个输入的数字是否友好-可能

首先是一个定义:一对友好的数由两个不同的整数组成,其中 第一个整数的除数之和等于第二个整数,并且 第二个整数的除数之和等于第一个整数。完美数是一个等于其自身除数之和的数

我想做的是制作一个程序,要求用户提供一个下限和一个上限,然后向他/她提供这两个限制之间的所有友好配对(每行一对)。如果有一个完美的数字,则只需打印一个数字(不是一对)

整个想法让我很困惑,所以我正在寻求帮助

这是我必须开始的,我知道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;
} 
长除数(长a)
{
长s=0,i;
对于(i=1;i您可以这样编写main():

int main ()
{
    // assumes 1 <= min <= max                                                                
    long min = 1;
    long max = 10000;

    for (long a = min; a <= max; a++) {
        long b = sum_of_proper_divisors (a);
        if (a == b) {
            printf ("perfect number:\t%ld\n", a);
        }
        if ((a < b) && (b <= max) && (sum_of_proper_divisors (b) == a)) {
            printf ("amicable pair:\t(%ld, %ld)\n", a, b);
        }
    }

    return 0;
}
int main()
{

//假设1在一个范围内找到友好对的最容易理解的方法如下:


找到介于1到2000之间的友好对。如果您想要介于1到3000之间,只需更改for循环的检查条件(i和j大多数人可能在理解友好对是什么方面遇到问题,让我通过一个示例来解释,220和284被称为友好对,因为如果我们找到220的适当除数,我们会得到220(1,2,4,5,10,11,20,22,44,55和110)加起来我们得到284。现在,284的适当除数是(1,2,4,71和142)把它们加起来,我们得到220。同样地,1184的除数之和等于1210,1210的除数之和等于1184。现在,我们用C写一个程序,找到10000范围内的所有友好对

int main()
    {
     int n,k;
     int i=1,s1=0,s2=0;

     for(k=1;k<=10000;k++)
        {
           n=k;
           while(i<n)
            {
             if(n%i==0)
             s1=s1+i;
             i++;
            }

          i=1;

          if(s1==n)
          continue;

          while(i<s1)
            {
             if(s1%i==0)
                s2=s2+i;
             i++;
            }

          if(n==s2)
          printf("%d \n",n);

          s1=0;
          s2=0;
       }
    }
intmain()
{
int n,k;
int i=1,s1=0,s2=0;

对于(k=1;kI认为,每当你收到一份涉及你不熟悉的数学的家庭作业时,你都应该查阅维基百科。这是一个很好的方法,可以让你快速了解这些概念。请特别注意文章中的例子,这些例子可以帮助你解决你的范围问题。这实际上是我得到定义的地方虽然仍然停留在如何实际使用它作为一个范围,而不是使用这两个数字来检查。我感谢您的帮助!我现在可以看到发生了什么,并且刚刚修复了我的原始代码。
int main()
    {
     int n,k;
     int i=1,s1=0,s2=0;

     for(k=1;k<=10000;k++)
        {
           n=k;
           while(i<n)
            {
             if(n%i==0)
             s1=s1+i;
             i++;
            }

          i=1;

          if(s1==n)
          continue;

          while(i<s1)
            {
             if(s1%i==0)
                s2=s2+i;
             i++;
            }

          if(n==s2)
          printf("%d \n",n);

          s1=0;
          s2=0;
       }
    }