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;
}