hdoj 1406

完数

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 35029 Accepted Submission(s): 13092

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

中文水题,棒!
蜜汁思路:一个一个算完数肯定超时,输出一下结果发现,完数就那几个,然后。。。

#include<stdio.h>
#include<math.h>

int pn[4]={6,28,496,8128};
int main()
{
    int n;
    scanf("%d",&n);
    while(n--)
    {
        int n1,n2;
        scanf("%d%d",&n1,&n2);
        int i;
        if(n1>n2)
            n1^=n2^=n1^=n2;//这是个贼骚的交换两个数的方法
        int count=0;
        for(i=0;i<4;i++)
        {
            if(n1<=pn[i]&&pn[i]<=n2)
                count++;
        }
        printf("%d\n",count);
    }
    
    
}

猜你喜欢

转载自blog.csdn.net/D_mengxin/article/details/84941113
今日推荐