hdu 1460 完数
注意: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 完数的更多相关文章
- 题解报告:hdu 1406 完数
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1406 Problem Description 完数的定义:如果一个大于1的正整数的所有因子之和等于它的 ...
- HDU 1406 完数 因子的和
http://acm.hdu.edu.cn/showproblem.php?pid=1406 完数的定义:如果一个大于1的正整数的所有因子之和等于它的本身,则称这个数是完数,比如6,28都是完数:6= ...
- HDOJ(HDU) 1406 完数
Problem Description 完数的定义:如果一个大于1的正整数的所有因子之和等于它的本身,则称这个数是完数,比如6,28都是完数:6=1+2+3:28=1+2+4+7+14. 本题的任务是 ...
- HDU-1406 完数
http://acm.hdu.edu.cn/showproblem.php?pid=1406 完数 Time Limit: 2000/1000 MS (Java/Others) Memory L ...
- java程序设计之完数
题目:一个数如果恰好等于它的因子之和,这个数就称为"完数".例如6=1+2+3.编程 找出1000以内的所有完数. 解题过程也很简单: public class wanshu { ...
- 程序设计入门——C语言 第6周编程练习 2 完数(5分)
2 完数(5分) 题目内容: 一个正整数的因子是所有可以整除它的正整数.而一个数如果恰好等于除它本身外的因子之和,这个数就称为完数.例如6=1+2+3(6的因子是1,2,3). 现在,你要写一个程序, ...
- OpenMP求完数
源代码: #include "stdafx.h" //必须写在首行,因为其前面的include都会被忽略 #include "omp.h" #include & ...
- 完数[HDU1406]
完数 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission( ...
- 码农谷 找出N之内的所有完数
题目描述 一个数如果恰好等于它的因子之和,这个数就称为"完数". 例如,6的因子为1.2.3,而6=1+2+3,因此6是"完数". 编程序找出N之内的所有完数, ...
随机推荐
- Delphi 实现 图灵机器人API(IDHTTP POST )
此功能所需的 Key及接口文档,都可以在图灵机器人的官网下载, 小伙伴们需要申请自己的图灵机器人账号. 申请方法请自行百度“图灵机器人” . 登录账号后,在左侧的[机器人接入],获取需要的信息,记得 ...
- WPF 之 UI 异步交互
System.Windows.Application.Current.Dispatcher.BeginInvoke(new Action(()=> { //··················· ...
- linux最基本命令
1.cd命令 这是一个非常基本,也是大家经常需要使用的命令,它用于切换当前目录,它的参数是要切换到的目录的路径,可以是绝对路径,也可以是相对路径.如: cd /root/Docements # 切换到 ...
- PXE-cobbler 无人值守装机
Cobbler PXE 自动安装系统(CentOS-7.2) 第一步:系统环境准备 1.查看系统版本与内核 2.关闭防火墙 3.关闭selinux 第二步:安装cobbler 与环境相关组件 1.下 ...
- pageadmin建站软如何修改和设置iis站点应用程序池
很多用户第一次安装PageAdmin建站系统时候会出现这个错误,主要原因: 1.首选打开iis站点基本设置,可以看到当前站点对应的应用程序池,如下图: 可以看到当前站点用的程序池名为MyAppPool ...
- 关于C# 向TIM或者QQ自动发送中文消息【微信也是可用的】 附测试GIF中微信可用的 全新修订
在上一篇文章的代码 对于微信已失效 重新更新一边 效果图: 源代码 using System; using System.Runtime.InteropServices; using System.T ...
- Ubuntu16.04以root身份登入!
首先以非root用户身份登入系统. 1,修改root密码:启动shell,随后在shell里面输入命令: sudo passwd root 最后输入root要使用的密码,需要输入两次,这样root密码 ...
- S:List
描述 写一个程序完成以下命令:new id ——新建一个指定编号为id的序列(id<10000)add id num——向编号为id的序列加入整数nummerge id1 id2——合并序列id ...
- 三,Smarty模板技术/引擎——变量操作(2)
1, 变量的分类 ① 从PHP中分配的变量,比如a.php跳转到b.php时候,可以在a.php中分配变量,b.tpl中直接调用.a.php中代码,$smarty->assign(‘str’,’ ...
- Your branch is ahead of 'origin/master' by 1 commit.
git reset HEAD^ --soft git reset HEAD^ --hard --soft 表示保留当前commit,重新commit --hard 表示丢弃当前add,重新add.co ...