shunfurh
编程介的小学生
采纳率92.7%
2019-02-18 11:07 阅读 1.1k

运用C语言的编程的技术,编写一个程序,判断给定的两个数是否是亲和数

Problem Description

古希腊数学家毕达哥拉斯在自然数研究中发现,220的所有真约数(即不是自身的约数)之和为:

1+2+4+5+10+11+20+22+44+55+110=284。

而284的所有真约数为1、2、4、71、 142,加起来恰好为220。人们对这样的数感到很惊奇,并称之为亲和数。一般地讲,如果两个数中任何一个数都是另一个数的真约数之和,则这两个数就是亲和数。

你的任务就编写一个程序,判断给定的两个数是否是亲和数

Input
输入数据第一行包含一个数M,接下有M行,每行一个实例,包含两个整数A,B; 其中 0 <= A,B <= 600000 ;

Output
对于每个测试实例,如果A和B是亲和数的话输出YES,否则输出NO。

Sample Input
2
220 284
100 200

Sample Output
YES
NO

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

3条回答 默认 最新

  • huangbaokang 黄宝康 2019-02-18 11:29
    #include<iostream> 
    
    using namespace std; 
    
    #include<stdio.h> 
    
    int sum(int b)  
    
    {  
    
      int s=0,k;  
    
      for(k=1;k<=b/2;k++)  
    
      {  
    
         if(b%k==0) s=s+k;    
    
      }  
    
      return s;  
    
    }  
    
    int main()  
    
    {  
    
       int n;  
    
       int x,y;  
    
       while(scanf("%d", &n)!=EOF)  
    
       {  
    
          while(n--)  
    
          {  
    
    
    
    scanf("%d%d",&x,&y);  
    
      if(x==sum(y)&&y==sum(x))  
    
          cout<<"YES"<<endl;  
    
         else
    
          cout<<"NO"<<endl; 
    
       }  
    
       }  
    
    
    
      return 0;   
    
    }  
    
    点赞 评论 复制链接分享
  • lzl_Avery lzl_Avery 2019-02-18 11:32

    很简单嘛,按照题意做就对了 分解 1个控制输入的循环(控制组数) 函数调用函数2 并作判断. 函数2的作用是查找一个数的真约数 求和返回
    函数1(主函数)大概如下
    int main(){
    int ....//定义声明变量
    scanf()//输入测试组数n
    while(n>0){
    scanf()//输入每组测试数据num1,num2
    sum1=fun2(num1);//调用函数2分别求num1 num2的真约数和
    sum2=fun2(num2);
    if(sum1==num2&&sum2==num1){
    printf("YES\n");
    }else{
    printf("NO\n");
    }
    n--;
    }
    return 0;
    }
    // fun2
    int fun2(int num){
    .....//求真约数合的代码逻辑写在这里就可以了
    return sum;
    }

    点赞 评论 复制链接分享
  • nero0703 45度凝视 2019-02-18 15:00

    不知道“Sample Input”和“Sample Output”算不算输出,代码可以稍微调整一下。

    #include<stdio.h>
    
    int check(int b){
        int s=0,k;
        for(k=1;k<=b/2;k++){
            if(b%k==0)
                s+=k;
        }
        return s;
    }
    
    int main() {
        int n;
        int x,y;
        printf("Sample Input\n");
        scanf("%d", &n);
        int nums[2*n];
        for(int i=0;i<2*n;i+=2){
            scanf("%d %d",&x,&y);
            nums[i]=x;
            nums[i+1]=y;
        }
        printf("Sample Output\n");
        for(int i=0;i<2*n;i+=2){
            if(nums[i]==check(nums[i+1]) && nums[i+1]==check(nums[i])){
                printf("YES\n");
            }else{
                printf("NO\n");
            }
        }
        return 0;
    }
    
    点赞 评论 复制链接分享

相关推荐