博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu5901 Count primes(大素数模版)
阅读量:7239 次
发布时间:2019-06-29

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

题意:

1——n(10^11)的素数个数

思路:

参考:http://blog.csdn.net/chaiwenjun000/article/details/52589457

第一个O(n^(3/4))

/* ***********************************************Author        :devil************************************************ */#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define inf 0x3f3f3f3f#define LL long long#define rep(i,a,b) for(int i=a;i<=b;i++)#define dep(i,a,b) for(int i=a;i>=b;i--)#define ou(a) printf("%d\n",a)#define pb push_back#define mkp make_pairtemplate
inline void rd(T &x){ char c=getchar();x=0;while(!isdigit(c))c=getchar();while(isdigit(c)){x=x*10+c-'0';c=getchar();}}#define IN freopen("in.txt","r",stdin);#define OUT freopen("out.txt","w",stdout);using namespace std;const int mod=1e9+7;const int N=310;LL f[340000],g[340000],n;void init(){ LL i,j,m; for(m=1;m*m<=n;m++) f[m]=n/m-1; for(i=1;i<=m;i++) g[i]=i-1; for(i=2;i<=m;i++) { if(g[i]==g[i-1]) continue; for(j=1;j<=min(m-1,n/i/i);j++) { if(i*j
=i*i;j--) g[j]-=g[j/i]-g[i-1]; }}int main(){ while(~scanf("%lld",&n)) { init(); cout<
<

第二个O(n^(2/3))

/* ***********************************************Author        :devil************************************************ */#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define inf 0x3f3f3f3f#define LL long long#define rep(i,a,b) for(int i=a;i<=b;i++)#define dep(i,a,b) for(int i=a;i>=b;i--)#define ou(a) printf("%d\n",a)#define pb push_back#define mkp make_pairtemplate
inline void rd(T &x){ char c=getchar();x=0;while(!isdigit(c))c=getchar();while(isdigit(c)){x=x*10+c-'0';c=getchar();}}#define IN freopen("in.txt","r",stdin);#define OUT freopen("out.txt","w",stdout);using namespace std;const int mod=1e9+7;const int N=5e6+2;bool np[N];int prime[N],pi[N];int getprime(){ int cnt=0; np[0]=np[1]=1; pi[0]=pi[1]=0; for(int i=2;i
c) continue; LL lim=lehmer_pi(sqrt2(w)); for(int j=i;j<=lim;j++) sum-=lehmer_pi(w/prime[j])-(j-1); } return sum;}int main(){ init(); LL n; while(~scanf("%lld",&n)) { printf("%lld\n",lehmer_pi(n)); } return 0;}

 

转载于:https://www.cnblogs.com/d-e-v-i-l/p/5894411.html

你可能感兴趣的文章
DNS安全浅议、域名A记录(ANAME),MX记录,CNAME记录 专题
查看>>
数据字典生成工具之旅(9):多线程使用及介绍
查看>>
Java编程思想学习笔记——注解
查看>>
使用HTML5新特性Mutation Observer实现编辑器的撤销和撤销回退操作
查看>>
Java可变参数传递中可以接收多个对象
查看>>
Python中的正则表达式(re)
查看>>
2016 新学++ , 回顾过去展望未来
查看>>
让你在DOS中任意切换目录
查看>>
较完整的轮播图特效
查看>>
微信公众开发接入服务器的接口配置信息
查看>>
deployment与Web应用程序部署
查看>>
详解iOS多图下载的缓存机制
查看>>
关于CAE的那点儿破事儿
查看>>
prometheus + grafana安装部署(centos6.8)
查看>>
排序算法之快速排序
查看>>
日志框架logj的使用
查看>>
架构师必看-架构之美第14章-两个系统的故事:现代软件神话(一)
查看>>
struts2从2.2.3升级到2.3.15.1步骤
查看>>
你所不了解的静态路由特点及配置
查看>>
37、pendingIntent 点击通知栏进入页面
查看>>