数学基础:HUD1406-完数
来源:互联网 发布:文献查重软件 编辑:程序博客网 时间:2024/05/23 16:54
完数
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Problem Description
完数的定义:如果一个大于1的正整数的所有因子之和等于它的本身,则称这个数是完数,比如6,28都是完数:6=1+2+3;28=1+2+4+7+14。
本题的任务是判断两个正整数之间完数的个数。
Input
输入数据包含多行,第一行是一个正整数n,表示测试实例的个数,然后就是n个测试实例,每个实例占一行,由两个正整数num1和num2组成,(1
Output
对于每组测试数据,请输出num1和num2之间(包括num1和num2)存在的完数个数。
Sample Input
2
2 5
5 7
Sample Output
0
1
解题心得:
- 没什么技巧直接暴力就可以了,其实这个题也就四个完数(6、28、496、8128),实在不行打个表特判都可以。但是出题人有个无聊的坑,a不一定比b更小,所以要判断一下。
#include<bits/stdc++.h>using namespace std;const int maxn = 1e4+10;bool num[maxn];//先暴力的预处理一下就可以了void pre_check(){ for(int i=1; i<maxn; i++) { int sum = 0; for(int j=1; j<i; j++) { if(i % j == 0) sum += j; } if(sum == i) num[i] = true; }}int main(){ pre_check(); int n; scanf("%d",&n); while(n--) { int ans = 0; int a,b; scanf("%d%d",&a,&b); if(a > b)//当a比不b大的时候直接交换一下就可以了 swap(a,b); for(int i=a;i<=b;i++) if(num[i]) ans++; printf("%d\n",ans); }}
阅读全文
0 0
- 数学基础:HUD1406-完数
- 数学问题:完数
- hdu1406 完数(数学:求因子之和)
- 数学问题——找“完数”
- 数学基础
- 数学基础
- 数学基础
- 数学基础
- 基础数学
- 数学基础
- 数学基础
- 基础数学
- 数学基础
- 数学基础
- 基础数学
- 数学基础
- 【数学】3D数学基础
- 【数学】SHLQSH数
- 华为机试——字串的连接最长路径查找
- 设计模式-23-2-对象适配器
- Java基础之方法的重写
- 20170729_map 的简单操作
- Activity之间的数据传递
- 数学基础:HUD1406-完数
- 欢迎使用CSDN-markdown编辑器
- hdu4569(优化,数学题,枚举)
- 从保护模式切换到实模式遇到了大问题,求解
- 机器学习资料发布(2017年7月29日第一次)
- Docker实战系列——第三话--docker 监控(三)-- how could we monitoring(2)?
- 实现一个双向链表
- 文件查找
- matlab中setfield函数的使用