zoukankan      html  css  js  c++  java
  • 妙趣横生的算法:亲密数

    题目:

    如果整数A的全部因子(包括1,不包括A本身)之和等于B,并且整数B的全部因子(包括1,不包括B本身)之和等于A,,则称整数A和B为亲密数。求解3000以内的全部亲密数。

    #include <stdio.h>
    #include <string.h>
    
    int factor_sum(int n) // 计算n的因子和
    {
        int i;
        int sum = 0;
        for( i=1; i<n ; i++)
            if( n%i == 0 )
                sum += i;
        return sum;
    }
    
    int main(void)
    {
        int fsum[3001], flag[3001]; // fsum[]数组用于存储1-3000各数字的因子和, flag[]用于标记1-3000各数字是否已经找到,避免同一对亲密数输出两次
        int i, peer;
    
        for( i=1; i<=3000; i++ )
            fsum[i] = factor_sum(i);
    
        bzero(flag,sizeof(int)*3001);
        for( i=1; i<=3000; i++)
        {
            peer = fsum[i];
            if( peer<=3000 && i!=peer && flag[peer]!=1 ) // 数字i的因子和为peer,若peer在3000以内,判断peer!=i,且尚未找到,即flag[peer]!=1
            {
                if(fsum[peer] == i)
                    printf("(%d,%d)
    ",i,peer);
                flag[i] = 1;
            }
        }
    
        return 0;
    }
    
  • 相关阅读:
    JS判断对象中是否存在某参数
    JS通过url下载文件
    .NET CORE LinQ查询中计算时间差
    C# 判断某个时间是星期几
    C#数组去重
    python Tank
    kubeflannel.yml Tank
    片言只语 Tank
    other Tank
    ERROR大集合 Tank
  • 原文地址:https://www.cnblogs.com/DayByDay/p/3853302.html
Copyright © 2011-2022 走看看