OJ 亲和数

Posted Life is Binary

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了 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("\n");
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("\n");
37         i++;
38     }
39     return 0;
40 }

 

以上是关于 OJ 亲和数的主要内容,如果未能解决你的问题,请参考以下文章

一本通1154:亲和数

HDU 2040:亲和数

亲和数

亲和数

亲和数

1912: 亲和数