博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
zoj 2286 Sum of Divisors
阅读量:5112 次
发布时间:2019-06-13

本文共 2259 字,大约阅读时间需要 7 分钟。

// f(n)表示 n的约数和 不包括自己 // 给你一个m 求1 到 100万里面 f(n)<=m 的个数 // 那么首先要用筛选求出所有出 f(n) // 然后就好办了  // 写好后 看见别人好快  去百度了下 发现有用二分的 用了下 快了 100Ms 不过 数据越大 二分优势越明显 #include 
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;#define maxm 10010#define maxn 1000010int prim[maxn/3],p;bool f[maxn];int gcd(int a,int b){ int r; while(r=a%b){a=b;b=r;} return b;}bool isp(int n){ if(n==2) return true; if(n%2==0||n==1) return false; int m=(int)(sqrt(n+1.0)); for(int i=3;i<=m;i+=2) if(n%i==0) return false; return true;}int getprime(){ int i,j; f[1]=true; for(i=4;i<=maxn;i+=2) f[i]=true; int m=(int)(sqrt(maxn+1.0)); for(i=3;i<=m;i+=2){ for(j=i*i;j<=maxn;j+=i) f[j]=true; } for(i=1;i<=maxn;i++) if(!f[i]) prim[p++]=i;}int sum[maxn];void sum_divisor(int n){ int i,j; int m=(int)(sqrt(n+1.0)); for(i=2;i<=n/2;i++) for(j=i+i;j<=n;j+=i) sum[j]+=i;}int main(){ int n; int m; int i,k; sum_divisor(maxn); while(scanf("%d",&m)!=EOF){ n=0; for(i=1;i<=1000000;i++) if(sum[i]

 二分 求解

#include 
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;#define maxm 10010#define maxn 1000010int prim[maxn/3],p;bool f[maxn];int gcd(int a,int b){ int r; while(r=a%b){a=b;b=r;} return b;}bool isp(int n){ if(n==2) return true; if(n%2==0||n==1) return false; int m=(int)(sqrt(n+1.0)); for(int i=3;i<=m;i+=2) if(n%i==0) return false; return true;}int getprime(){ int i,j; f[1]=true; for(i=4;i<=maxn;i+=2) f[i]=true; int m=(int)(sqrt(maxn+1.0)); for(i=3;i<=m;i+=2){ for(j=i*i;j<=maxn;j+=i) f[j]=true; } for(i=1;i<=maxn;i++) if(!f[i]) prim[p++]=i;}int sum[maxn];void sum_divisor(int n){ int i,j; int m=(int)(sqrt(n+1.0)); for(i=2;i<=n/2;i++) for(j=i+i;j<=n;j+=i) sum[j]+=i;}int main(){ int n; int m; int i,k; sum_divisor(maxn); sort(sum+1,sum+1000000+1); while(scanf("%d",&m)!=EOF){ int l=1,r=1000000,mid; while(l<=r){ mid=(l+r)>>1; if(sum[mid]+1>m) r=mid-1; else if(sum[mid]+1<=m) l=mid+1; // printf("%d ",sum[mid]+1); getchar(); }; printf("%d\n",l-1); } return 0;}

 

转载于:https://www.cnblogs.com/372465774y/p/3208878.html

你可能感兴趣的文章
Jzoj4757 树上摩托
查看>>
CF992E Nastya and King-Shamans(线段树二分+思维)
查看>>
第一个Java Web程序
查看>>
树状数组_一维
查看>>
如果没有按照正常的先装iis后装.net的顺序,可以使用此命令重新注册一下:
查看>>
linux install ftp server
查看>>
嵌入式软件设计第8次实验报告
查看>>
算法和数据结构(三)
查看>>
Ubuntu下的eclipse安装subclipse遇到没有javahl的问题...(2天解决了)
查看>>
alter database databasename set single_user with rollback IMMEDIATE 不成功问题
查看>>
Repeater + Resources 列表 [原创][分享]
查看>>
WCF揭秘——使用AJAX+WCF服务进行页面开发
查看>>
【题解】青蛙的约会
查看>>
IO流
查看>>
mybatis调用存储过程,获取返回的游标
查看>>
设计模式之装饰模式(结构型)
查看>>
面向对象的设计原则
查看>>
Swift3.0服务端开发(三) Mustache页面模板与日志记录
查看>>
【转】 FPGA设计的四种常用思想与技巧
查看>>
EntityFrameWork 实现实体类和DBContext分离在不同类库
查看>>