zoukankan      html  css  js  c++  java
  • 【 OJ 】亲和数

    亲和数

    发布时间: 2017年11月12日 12:31   最后更新: 2017年11月12日 12:33   时间限制: 1000ms   内存限制: 128M

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

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

      而284的所有真约数为1、2、4、71、 142,加起来恰好为220。人们对这样的数感到很惊奇,并称之为亲和数。

      一般地讲,如果两个数中任何一个数都是另一个数的真约数之和,则这两个数就是亲和数。

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

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

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

    2
    220 284
    100 200
    YES
    NO
    源码(暴力)
     1 #include <stdio.h>
     2 #include <math.h>  // 这行忘了删了。。
     3 int main(){
     4     int n;
     5     int i = 0,j;
     6     int a,b;
     7     int suma,sumb;
     8     scanf("%d",&n);
     9 
    10     while(i < n){
    11         scanf("%d%d",&a,&b);
    12         suma = 1,sumb = 1;
    13         for(j = 2; j < a; j++){
    14             if(a % j == 0)
    15                 suma += j;
    16         }
    17         for(j = 2; j < b; j++){
    18             if(b % j == 0)
    19                 sumb += j;
    20         }
    21         if(suma == b && sumb == a)
    22             printf("YES");
    23         else
    24             printf("NO");
    25         if(i != n-1)
    26             printf("
    ");
    27         i++;
    28     }
    29     return 0;
    30 }

      之前想的是一次循环就搞完,但是通过不了,很尴尬,我也发现了9363584 和 9437056 过不了。。就是不知道哪里错了

      我也就贴出来了

     1 #include <stdio.h>
     2 #include <math.h>
     3 int main(){
     4     int n;
     5     int i = 0,j;
     6     int a,b;
     7     double max;
     8     int suma,sumb;
     9     scanf("%d",&n);
    10 
    11     while(i < n){
    12         suma = 1,sumb = 1;
    13         scanf("%d%d",&a,&b);
    14         max = a > b ? a : b;
    15         for(j = 2; j <= (int)sqrt(max); j++){
    16             if(a <= max){
    17                 if(a % j == 0){
    18                     suma += j;
    19                     if(j*j != a)
    20                         suma += a/j;
    21                 }
    22             }
    23             if(b <= max){
    24                 if(b % j == 0){
    25                     sumb += j;
    26                     if(j*j != b)
    27                         sumb += b/j;
    28                 }
    29             }
    30         }
    31         if(suma == b && sumb == a)
    32             printf("YES");
    33         else
    34             printf("NO");
    35         if(i != n-1)
    36             printf("
    ");
    37         i++;
    38     }
    39     return 0;
    40 }
    道阻且长,行则将至。
  • 相关阅读:
    【POJ
    【POJ
    【POJ
    【POJ
    【POJ
    【POJ
    【POJ
    【POJ
    NAT
    OSPF与ACL综合实验
  • 原文地址:https://www.cnblogs.com/forfriendforfun/p/8040579.html
Copyright © 2011-2022 走看看