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之内的所有完数, ...
随机推荐
- js 格式化时间
//格式化时间 function time_format(time) { return new Date(parseInt(time) * 1000).toLocaleString().replace ...
- DotNetBar 中 SuperGridControl 加载数据、获取数据、设置样式
1.加载数据 构建列 //加载列 GridColumn gd = new GridColumn(); gd.Name = "第1"; gd.HeaderText = "第 ...
- c++调用c#写的DLL
c++调用c#写的DLL: 此文章演示了建立c#的dll: c++建立工程,引入dll: 不能解决的问题: 指定dll的路径,在代码里面直接写 #using "xxx.dll" 必 ...
- 微信开发之c#下缓存jssdk的access_token
因为access_token的寿命只有7200秒,每日获取access_token存在上限,所以在获取access_token后,需要将其缓存起来. 首先建立一个模型 public class Acc ...
- django media配置
当我们需要向服务器发送图片或视频,需要对这些媒体文件进行保存时,需要指定保存在哪并将保存的路径添加到路由中. 1.设置settings.py MEDIA_URL = '/media/' MEDIA_R ...
- JavaScript作用域详解
作用域在JavaScript中是非常重要的概念,理解了它对更深入地理解闭包等概念都有很大的帮助,这篇文章就来谈谈我对作用域的理解. 一.全局作用域与局部作用域 在JavaScri ...
- HttpRunnerManager接口自动化测试框架在win环境下搭建教程
近几日一直在研究如何把接口自动化做的顺畅,目前用的是轻量级jmeter+ant+Jenkins自动化测试框架,目前测试界的主流是python语言,所以一直想用搭建一个基于python的HttpRunn ...
- python设计模式-适配器
定义: 将一个接口转换为客户希望的另一个接口,该模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作 适配器模式又叫变压器模式,也叫包装模式(Wrapper),它的核心思想是将一个对象经过包装 ...
- 2019 JUST Programming Contest J. Grid Beauty
J. Grid Beauty time limit per test 3.0 s memory limit per test 256 MB input standard input output st ...
- string.Format("rspauth={0}",
public string rspauth(string Username, string Realm, string Password, string Nonce, string Cnonce, ...