hdu 1460 完数
注意: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 完数相关推荐
- HDU 1406 完数
完数 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submiss ...
- hdu 1046 完数
这个关键是题目要看清啊.我一直是题目没弄清楚错了好几次.代码看了就清楚题目了 代码: #include"iostream" using namespace std; int mai ...
- ACMNO.11 一个数如果恰好等于它的因子之和,这个数就称为“完数“。 例如,6的因子为1、2、3,而6=1+2+3,因此6是“完数“。 编程序找出N之内的所有完数,并按下面格式输出其因子
写在前面,心得感悟~ 代码越来越有难度! 这个ACM题,我调试了 将近50次~ 一个小时! 真的是,年纪轻轻的搞什么ACM呀! 关于题的解决思路放在下面再写吧! 题目描述 一个数如果恰好等于它的因子之 ...
- C语言打印1000以内的完数
C语言打印1000以内的完数 #include <stdio.h> int main() {int m, s, i;int n = 1000;for (m = 2; m <= n; ...
- 【c语言】蓝桥杯算法训练 完数
问题描述 一个数如果恰好等于它的因子之和,这个数就称为"完数".例如,6的因子为1.2.3,而6=1+2+3,因此6就是"完数".又如,28的因子为1.2.4. ...
- 算法每日练习之判断完数
package myjava; //2016-8-22题目:一个数如果恰好等于它的因子之和,这个数就称为"完数".例如6=1+2+3.编程 找出1000以内的所有完数. publi ...
- C++第10周项目4参考——完数
课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565 [项目4:输出完数](课本p86第20题)一个数如果恰好等于它的因子之和, ...
- C++实现 找出10000以内的完数
C++实现 找出10000以内的完数 #include <stdio.h> int main(){int n; // 用户输入的整数int i; // 循环标志printf("输 ...
- Python求找出1000以内所有的“完数”
完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数.它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身.如果一个数恰好等于它的真因子之和,则称该数为& ...
最新文章
- [转载] 七龙珠第一部——第079话 金角跟银角
- 查看LINUX当前负载
- 算法改进有多快?是否比迭代硬件收益更大?这是MIT的结论
- @configurationproperties注解给属性赋值
- access数据类型百度百科_Day 7 基本数据类型
- Java 之常用API(一)
- 被嘲笑、误导的AI应该得到认可
- ArcGIS的基本使用
- 向日葵深度linux,完美使用向日葵远程软件
- ps图片去水印-ps图片去水印教程
- 苹果软件更新在哪里_手机资讯:iPhone 为什么比安卓手机好用iPhone 的独到之处在哪里...
- 阿里P9:聊聊大厂晋升的“潜规则”
- HTML5期末大作业:商城网站设计——仿唯品会购物商城(5页) 纯手写-高质量 HTML+CSS+JavaScript
- SQLServer还原数据库
- 领英加人的方法和细节,一个月轻松加1000+人
- TIA博途V17中如何创建和使用VoT应用程序_Web功能
- centos8更换软件源
- 1.27 Daisy Chains(花瓣)
- 滴滴Logi-KafkaManage安装手册
- 背记不如实战系列-javaGUI实例-日历制作
热门文章
- 友善之臂编linux内核,友善之臂NanoPC-T3 Plus,s5p6818编译Linux内核流程
- java 测试工具 oracle_几种测试工具的简单介绍
- APP技巧:手机该不该每天关机一次?看完才恍然大悟!
- mysql字符集说明
- Android 第十三课 SharedPreferences存储
- 苹果复兴_类型复兴的故事:来自Type West的经验教训
- css版式_第2部分:使版式具有响应能力,并为以后的版本奠定基础
- 腾讯正式宣布成立技术委员会,要对组织架构下狠手
- unity3d曲线text文本
- 解决git提交问题error: The requested URL returned error: 403 Forbidden while accessing