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

有两种方法:

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

 #include<iostream>
#include<cstring>
#include<cstdio>
#include<string>
#include<cmath>
#include<algorithm>
using namespace std;
int p[];//记录包括自身的完数个数
bool vis[];
int prime[1229+1];//如何估算比n小的素数的个数?? 提前打印即可,小于10000共1229个素数
void print_prime(){
memset(vis,false,sizeof(vis));
int i=;
int index=;
for(;i<;i++){
if(!vis[i]){
prime[index++]=i;
}
for(int j=;j<index&&prime[j]*i<;j++){
vis[prime[j]*i]=true;
if(i%prime[j]==){
break;
}
}
}
}
int work(int n){
int i=,ret=,total=,temp=n;
for(;prime[i]*prime[i]<=n;i++){
int sum=;
int num=;
while(n%prime[i]==){
num*=prime[i];
n/=prime[i];
sum+=num;
}
total*=sum;
}
if(n>){
total*=n+;
}
return total-temp;
}
void get_p(){
memset(p,,sizeof(p));
p[]=;
p[]=;
int i=;
for(;i<;i++){
if(i==work(i)){
p[i]=p[i-]+;
}
else{
p[i]=p[i-];
}
}
}
int main()//
{
int n;
cin>>n;
print_prime();
get_p();
//cout<<p[6]<<endl;
while(n--){
int num1,num2;
cin>>num1>>num2;
if(num1>num2){
num1=num1+num2;
num2=num1-num2;
num1=num1-num2;
}
cout<<p[num2]-p[num1-]<<endl;
}
return ;
}

法二:筛法

 #include<iostream>
#include<cstring>
#include<cstdio>
#include<string>
#include<cmath>
#include<algorithm>
using namespace std;
int main()//
{
int n;
cin>>n;
while(n--){
int num1,num2;
cin>>num1>>num2;
if(num1>num2){
num1=num1+num2;
num2=num1-num2;
num1=num1-num2;
}
int i=num1;
int num=;
for(;i<=num2;i++){
int j=;
int sum=;
for(;j<=i/;j++){
if(i%j==){
sum+=j;
}
}
if(sum==i){
num++;
}
}
cout<<num<<endl;
}
return ;
}

hdu 1460 完数的更多相关文章

  1. 题解报告:hdu 1406 完数

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1406 Problem Description 完数的定义:如果一个大于1的正整数的所有因子之和等于它的 ...

  2. HDU 1406 完数 因子的和

    http://acm.hdu.edu.cn/showproblem.php?pid=1406 完数的定义:如果一个大于1的正整数的所有因子之和等于它的本身,则称这个数是完数,比如6,28都是完数:6= ...

  3. HDOJ(HDU) 1406 完数

    Problem Description 完数的定义:如果一个大于1的正整数的所有因子之和等于它的本身,则称这个数是完数,比如6,28都是完数:6=1+2+3:28=1+2+4+7+14. 本题的任务是 ...

  4. HDU-1406 完数

    http://acm.hdu.edu.cn/showproblem.php?pid=1406 完数 Time Limit: 2000/1000 MS (Java/Others)    Memory L ...

  5. java程序设计之完数

    题目:一个数如果恰好等于它的因子之和,这个数就称为"完数".例如6=1+2+3.编程 找出1000以内的所有完数. 解题过程也很简单: public class wanshu { ...

  6. 程序设计入门——C语言 第6周编程练习 2 完数(5分)

    2 完数(5分) 题目内容: 一个正整数的因子是所有可以整除它的正整数.而一个数如果恰好等于除它本身外的因子之和,这个数就称为完数.例如6=1+2+3(6的因子是1,2,3). 现在,你要写一个程序, ...

  7. OpenMP求完数

    源代码: #include "stdafx.h" //必须写在首行,因为其前面的include都会被忽略 #include "omp.h" #include & ...

  8. 完数[HDU1406]

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

  9. 码农谷 找出N之内的所有完数

    题目描述 一个数如果恰好等于它的因子之和,这个数就称为"完数". 例如,6的因子为1.2.3,而6=1+2+3,因此6是"完数". 编程序找出N之内的所有完数, ...

随机推荐

  1. delphi Form显示先后问题

  2. docker+selenium grid解决node执行经常卡死

    执行用例时出现下图: 可以在启动node节点容器时添加如下红色字体的参数 docker run -d -p 5903:5900 --shm-size=512m --link selenium_hub: ...

  3. windows系统重装流程

    新电脑或者电脑因系统文件损坏都需要重装系统,因为之前工作中有一段时间经常帮同事装系统,总结了一些经验,现分享给大家. 重装系统大体有下列几种种常见方法: 1. 系统重装盘: 2. 从U盘重装: 3. ...

  4. 如何跟踪sharepoint详细日志

    PS C:\Users\setup.moss> Set-SPLogLevel -TraceSeverity verboseexPS C:\Users\setup.moss> New-SPL ...

  5. kvm虚拟机静态迁移

    1.静态迁移就是虚拟机在关机状态下,拷贝虚拟机虚拟磁盘文件与配置文件到目标虚拟主机中,实现的迁移. (1)虚拟主机各自使用本地存储存放虚拟机磁盘文件 本文实现基于本地磁盘存储虚拟机磁盘文件的迁移方式, ...

  6. “全栈2019”Java第十四章:二进制、八进制、十六进制

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  7. mongodb获取具体某一天的查询语句

    比如我要查询截止日期为2010-12-21这一天的数据记录.方法一. db.集合名.find({con_date:new Date("2010/12/21")})1方法二. db. ...

  8. secureCRT颜色方案设置

    按照如下设置后vim编辑会有如下颜色提示

  9. Oracle中对多行查询结果进行拼接

    to_char(wmsys.wm_concat(to_char( st.col_name))) as new_name to_char: 将当前值转换成字符串类型; wmsys.wm_concat:拼 ...

  10. POJ1591 M*A*S*H (JAVA)

    这水题,真的坑 测试数据最后有空行,如果用sc.hasNextLine()判断,会RE 要改为sc.hasNext() 搞了我一上午,烦死 import java.util.*; public cla ...