• HDU 1406 完数


    完数

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

    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
     
    Recommend
    Ignatius.L   |   We have carefully selected several similar problems for you:  1215 1286 1407 1408 1108 
     
    Statistic | Submit | Discuss | Note

    ——分割线——

    最近要NOIP了,赶快刷水题!这个完数竟然Wa了我两次,我们要好好看题下次。为了适应NOIP,我是预处理+树状数组的,好吧,其实这道题暴力就可以了。这题的一个坑点是输入的范围并不能保证第一个小于第二个!QAQ、、、、、

    代码:

    /*Author:WNJXYK*/
    #include<cstdio>
    #include<iostream>
    #include<string>
    #include<cstring>
    #include<algorithm>
    #include<set>
    #include<map>
    #include<queue>
    using namespace std;
    
    #define LL long long
    
    const int Maxn=10000;
    int Sum[Maxn+10];
    int Add[Maxn+10];
    
    inline int lowbit(int x){
    	return (x&-x);
    }
    
    inline void insert(int x,int val){
    	for (int i=x;i<=Maxn;i+=lowbit(i)){
    		Sum[i]+=val;
    	}
    } 
    
    inline int get(int x){
    	int sum=0;
    	for (int i=x;i;i-=lowbit(i)){
    		sum+=Sum[i];
    	}
    	return sum;
    }
    
    inline void init(){
    	for (int i=1;i<=Maxn;i++){
    		for (int j=2*i;j<=Maxn;j+=i){
    			Add[j]+=i;
    		}
    	}
    	for (int i=2;i<=Maxn;i++){
    	//	if (Add[i]==i) printf("%d
    ",i);
    		if (Add[i]==i) insert(i,1);
    	}
    }
    
    int main(){
    	init();
    	int n;
    	scanf("%d",&n);
    	for (;n--;){
    		int x,y;
    		scanf("%d%d",&x,&y);
    		if (x>y){
    			x=x+y;
    			y=x-y;
    			x=x-y;
    		} 
    		printf("%d
    ",get(y)-get(x-1));
    	}
    	return 0;
    }
    


  • 相关阅读:
    编程练习--判断两个数组中数据的数据类型是否相同
    JS 类型检测
    JS学习笔记 等于和包装对象
    HTML5经典案例学习-----新元素添加文档结构
    JZ2440存储管理器--SDRAM
    GPIO实验之c语言
    1- 裸机开发GPIO
    Java基础教程——数组
    Java基础教程——运算符
    结构化编程·图示
  • 原文地址:https://www.cnblogs.com/WNJXYK/p/4063939.html
Copyright © 2020-2023  润新知