相亲数亲密数,不要去误入遍历的坑!!

亲密数_2
2500年前数学大师毕达哥拉斯就发现,220与284两数之间存在着奇妙的联系:
220的真因数之和为:1+2+4+5+10+11+20+22+44+55+110=284
284的真因数之和为:1+2+4+71+142=220
毕达哥拉斯把 这样的数对称为相亲数。相亲数,也称为 亲密数,如果整数A的全部因子(包括1,不包括A本身)之和等于B,且整数B的全部因子(包括1,不包括B本身)之和等于A,则将整数A和B称为亲密数。
从键盘任意输入一个整数n,编程计算并输出n以内的全部亲密数。
一对亲密数只输出一次, 小的在前。

#include <stdio.h>
int main ( )
{
   
    int n,B;
    printf("Input n:\n");
    scanf("%d",&n);
   
    for ( B = 1; B <= n; B++)
    {
        int b = 0,a = 0;
        for (int i = 1; i<B; i++) {
            if (B % i == 0)  b+=i;
            
        }
         //变化的地方!!可以减少找A的真因子的步骤
        if(B == b||B < b ) continue;
  
        for (int j = 1; j < b ; j++) {
            if (b%j==0 )
                a+=j;
        }
     
        if (a == B ) {
            printf("(%d,%d)\n",B,b);
        }
        
       
    }
发布了18 篇原创文章 · 获赞 0 · 访问量 201

猜你喜欢

转载自blog.csdn.net/weixin_46456339/article/details/105243150