Hdoj 1406 完数

来源:互联网 发布:科大讯飞 阿里云 编辑:程序博客网 时间:2024/06/01 07:47

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

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

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

Output
对于每组测试数据,请输出num1和num2之间(包括num1和num2)存在的完数个数。

Sample Input

2
2 5
5 7

Sample Output

0
1

Author
lcy

Source
杭电ACM集训队训练赛(IV)


题目分析
这题本身没什么难度,注意num1和num2的大小关系不明确,要加个判断
Code

#include<iostream>#include<cstdio>#include<algorithm>#include<cmath>#include<cctype> #include<cstring>#include<cstdlib>using namespace std;bool q[10001];  int count(int x){    int ans=0;    for(int i=1;i<=x/2;i++)    {        if(x%i==0) ans+=i;    }    return ans;} //计算因数和int main() {    int t;    cin>>t;    memset(q,0,sizeof(q));    for(int i=1;i<=10000;i++)    {        if(count(i)==i) q[i]=true;        //true则表示是个完数    }    int a,b;    while(t--)    {        cin>>a>>b;        if(a>b) swap(a,b);        int cnt=0;        for(int i=a;i<=b;i++)        {            if(q[i]==true) cnt++;        }        cout<<cnt<<endl;    }                  return 0;}

更多问题请关注个人博客,不定时更新

原创粉丝点击