hdu 1406 完数 筛法求因子和

来源:互联网 发布:sql语法 编辑:程序博客网 时间:2024/06/01 09:09

Problem Description
完数的定义:如果一个大于1的正整数的所有因子之和等于它的本身,则称这个数是完数,比如6,28都是完数:6=1+2+3;28=1+2+4+7+14。

本题的任务是判断两个正整数之间完数的个数。

Input
输入数据包含多行,第一行是一个正整数n,表示测试实例的个数,然后就是n个测试实例,每个实例占一行,由两个正整数num1和num2组成,(1

题解:

筛法预处理所有数的因子和。

代码:

#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int maxn = 10000+10;int a[maxn];void init(){    memset(a,0,sizeof(a));   for(int i=1;i<=5000;i++)   {       for(int j=2*i;j<=10000;j+=i)       {           a[j]+=i;       }   }}int main(){    init();    int T;    int num1,num2;    cin>>T;    while(T--)    {       cin>>num1>>num2;       if(num1>num2)        swap(num1,num2);        int ans=0;       for(int i=num1;i<=num2;i++)       {           if(i==a[i]) ans++;       }       cout<<ans<<endl;    }    return 0;}