日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

完数问题

發(fā)布時間:2023/12/13 综合教程 20 生活家
生活随笔 收集整理的這篇文章主要介紹了 完数问题 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題目鏈接

題目描述

請寫一個程序,給出指定整數(shù)范圍【a ,b】內(nèi)所有的完數(shù),一個數(shù)如果恰好等于除它本身外的所有因子之和,這個數(shù)就稱為完數(shù),例如6是完數(shù),因為6=1+2+3。

輸入描述:

每一組數(shù)據(jù)為兩個正整數(shù),分別表示a和b(1<a<b<10^5)。

輸出描述:

指定范圍內(nèi)的所有完數(shù),每個數(shù)占一行。

示例1

輸入

復制

1 100

輸出

復制

6
28

說明

完數(shù)問題本身很簡單,但是要注意一些問題,否則會引起超時

一是:應該由于因子兩兩成對,所以只需要計算到根號n之前,只求其一

二是:應該先將1~100000之間的所有完數(shù)存放到數(shù)組中,飯后再在給定區(qū)間進行匹配,否則會因為重復計算而超時

#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之間的完數(shù)計算出來,存到數(shù)組中
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)             //是完數(shù)則存入數(shù)組
        {
            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;
}

也可以采用打表的方法

總結

以上是生活随笔為你收集整理的完数问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。