zoukankan      html  css  js  c++  java
  • 完数问题

    题目链接

    题目描述

    请写一个程序,给出指定整数范围【a ,b】内所有的完数,一个数如果恰好等于除它本身外的所有因子之和,这个数就称为完数,例如6是完数,因为6=1+2+3。

    输入描述:

    每一组数据为两个正整数,分别表示a和b(1<a<b<10^5)。

    输出描述:

    指定范围内的所有完数,每个数占一行。
    示例1

    输入

    复制
    1 100

    输出

    复制
    6
    28

    说明

    完数问题本身很简单,但是要注意一些问题,否则会引起超时

    一是:应该由于因子两两成对,所以只需要计算到根号n之前,只求其一

    二是:应该先将1~100000之间的所有完数存放到数组中,饭后再在给定区间进行匹配,否则会因为重复计算而超时

    #include<iostream>
    #include<math.h>
    using namespace std;
    //采用此方法运行时间太长
    /*bool isWanshu(int n)
    {
        int sum = 1;
        for(int i = 2;i<=sqrt(n*1.0);i++)
        {
            if(n%i==0)
            {
                sum+=i;
                sum += n/i;
            }
        }
        if(sum == n && n!=1)
            return true;
        else
            return false;
    }*/
    //应先将1-100000之间的完数计算出来,存到数组中
    int wanshu[10] = {0};
    int index = 0;
    void findWanshu()
    {
        int sum;
    
        for(int n=2;n<100000;n++)
        {
            sum = 1;                       //1一定是因子
            for(int i = 2;i<=sqrt(n*1.0);i++)//只需计算到根号n之前
            {
                if(n%i==0)
                {
                    sum+=i;
                    sum += n/i;
                 }
            }
            if(sum==n)             //是完数则存入数组
            {
                wanshu[index] = n;
                index++;
            }
        }
    }
    int main()
    {
        findWanshu();
        int a = 0;
        int b = 0;
        while(cin>>a>>b)
        {
            for(int j = 0;j<index;j++)
            {
                if(wanshu[j]>=a && wanshu[j]<=b)
                    cout<<wanshu[j]<<endl;
            }
        }
        return 0;
    }

    也可以采用打表的方法

  • 相关阅读:
    HDU 2236 无题Ⅱ
    Golden Tiger Claw(二分图)
    HDU 5969 最大的位或 (思维,贪心)
    HDU 3686 Traffic Real Time Query System (图论)
    SCOI 2016 萌萌哒
    Spring Boot支持控制台Banner定制
    构建第一个Spring Boot程序
    Spring Boot重要模块
    Java fastjson JSON和String互相转换
    BCompare 4 Windows激活方法【试用期30天重置】
  • 原文地址:https://www.cnblogs.com/ttzz/p/10542454.html
Copyright © 2011-2022 走看看