注意:num1和num2的大小未知,需比较!

有两种方法:

法一:素数打印+素数分解(求因数和公式)

 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 #include<string>
 5 #include<cmath>
 6 #include<algorithm>
 7 using namespace std;
 8 int p[10005];//记录包括自身的完数个数
 9 bool vis[10005];
10 int prime[1229+1];//如何估算比n小的素数的个数??   提前打印即可,小于10000共1229个素数
11 void print_prime(){
12     memset(vis,false,sizeof(vis));
13     int i=2;
14     int index=0;
15     for(;i<10000;i++){
16         if(!vis[i]){
17             prime[index++]=i;
18         }
19         for(int j=0;j<index&&prime[j]*i<10000;j++){
20             vis[prime[j]*i]=true;
21             if(i%prime[j]==0){
22                 break;
23             }
24         }
25     }
26 }
27 int work(int n){
28     int i=0,ret=1,total=1,temp=n;
29     for(;prime[i]*prime[i]<=n;i++){
30         int sum=1;
31         int num=1;
32         while(n%prime[i]==0){
33             num*=prime[i];
34             n/=prime[i];
35             sum+=num;
36         }
37         total*=sum;
38     }
39     if(n>1){
40         total*=n+1;
41     }
42     return total-temp;
43 }
44 void get_p(){
45     memset(p,0,sizeof(p));
46     p[2]=0;
47     p[3]=0;
48     int i=4;
49     for(;i<10000;i++){
50         if(i==work(i)){
51             p[i]=p[i-1]+1;
52         }
53         else{
54             p[i]=p[i-1];
55         }
56     }
57 }
58 int main()//10000
59 {
60     int n;
61     cin>>n;
62     print_prime();
63     get_p();
64     //cout<<p[6]<<endl;
65     while(n--){
66          int num1,num2;
67          cin>>num1>>num2;
68          if(num1>num2){
69             num1=num1+num2;
70             num2=num1-num2;
71             num1=num1-num2;
72         }
73          cout<<p[num2]-p[num1-1]<<endl;
74     }
75     return 0;
76 }

法二:筛法

 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 #include<string>
 5 #include<cmath>
 6 #include<algorithm>
 7 using namespace std;
 8 int main()//10000
 9 {
10     int n;
11     cin>>n;
12     while(n--){
13         int num1,num2;
14         cin>>num1>>num2;
15         if(num1>num2){
16             num1=num1+num2;
17             num2=num1-num2;
18             num1=num1-num2;
19         }
20         int i=num1;
21         int num=0;
22         for(;i<=num2;i++){
23             int j=2;
24             int sum=1;
25             for(;j<=i/2;j++){
26                 if(i%j==0){
27                    sum+=j;
28                 }
29             }
30             if(sum==i){
31                 num++;
32             }
33         }
34         cout<<num<<endl;
35     }
36     return 0;
37 }

转载于:https://www.cnblogs.com/Deribs4/p/4270508.html

hdu 1460 完数相关推荐

  1. HDU 1406 完数

    完数 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submiss ...

  2. hdu 1046 完数

    这个关键是题目要看清啊.我一直是题目没弄清楚错了好几次.代码看了就清楚题目了 代码: #include"iostream" using namespace std; int mai ...

  3. ACMNO.11 一个数如果恰好等于它的因子之和,这个数就称为“完数“。 例如,6的因子为1、2、3,而6=1+2+3,因此6是“完数“。 编程序找出N之内的所有完数,并按下面格式输出其因子

    写在前面,心得感悟~ 代码越来越有难度! 这个ACM题,我调试了 将近50次~ 一个小时! 真的是,年纪轻轻的搞什么ACM呀! 关于题的解决思路放在下面再写吧! 题目描述 一个数如果恰好等于它的因子之 ...

  4. C语言打印1000以内的完数

    C语言打印1000以内的完数 #include <stdio.h> int main() {int m, s, i;int n = 1000;for (m = 2; m <= n; ...

  5. 【c语言】蓝桥杯算法训练 完数

    问题描述 一个数如果恰好等于它的因子之和,这个数就称为"完数".例如,6的因子为1.2.3,而6=1+2+3,因此6就是"完数".又如,28的因子为1.2.4. ...

  6. 算法每日练习之判断完数

    package myjava; //2016-8-22题目:一个数如果恰好等于它的因子之和,这个数就称为"完数".例如6=1+2+3.编程 找出1000以内的所有完数. publi ...

  7. C++第10周项目4参考——完数

    课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565 [项目4:输出完数](课本p86第20题)一个数如果恰好等于它的因子之和, ...

  8. C++实现 找出10000以内的完数

    C++实现 找出10000以内的完数 #include <stdio.h> int main(){int n; // 用户输入的整数int i; // 循环标志printf("输 ...

  9. Python求找出1000以内所有的“完数”

    完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数.它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身.如果一个数恰好等于它的真因子之和,则称该数为& ...

最新文章

  1. [转载] 七龙珠第一部——第079话 金角跟银角
  2. 查看LINUX当前负载
  3. 算法改进有多快?是否比迭代硬件收益更大?这是MIT的结论
  4. @configurationproperties注解给属性赋值
  5. access数据类型百度百科_Day 7 基本数据类型
  6. Java 之常用API(一)
  7. 被嘲笑、误导的AI应该得到认可
  8. ArcGIS的基本使用
  9. 向日葵深度linux,完美使用向日葵远程软件
  10. ps图片去水印-ps图片去水印教程
  11. 苹果软件更新在哪里_手机资讯:iPhone 为什么比安卓手机好用iPhone 的独到之处在哪里...
  12. 阿里P9:聊聊大厂晋升的“潜规则”
  13. HTML5期末大作业:商城网站设计——仿唯品会购物商城(5页) 纯手写-高质量 HTML+CSS+JavaScript
  14. SQLServer还原数据库
  15. 领英加人的方法和细节,一个月轻松加1000+人
  16. TIA博途V17中如何创建和使用VoT应用程序_Web功能
  17. centos8更换软件源
  18. 1.27 Daisy Chains(花瓣)
  19. 滴滴Logi-KafkaManage安装手册
  20. 背记不如实战系列-javaGUI实例-日历制作

热门文章

  1. 友善之臂编linux内核,友善之臂NanoPC-T3 Plus,s5p6818编译Linux内核流程
  2. java 测试工具 oracle_几种测试工具的简单介绍
  3. APP技巧:手机该不该每天关机一次?看完才恍然大悟!
  4. mysql字符集说明
  5. Android 第十三课 SharedPreferences存储
  6. 苹果复兴_类型复兴的故事:来自Type West的经验教训
  7. css版式_第2部分:使版式具有响应能力,并为以后的版本奠定基础
  8. 腾讯正式宣布成立技术委员会,要对组织架构下狠手
  9. unity3d曲线text文本
  10. 解决git提交问题error: The requested URL returned error: 403 Forbidden while accessing