都是取的模板,这几天做的素数题挺多的,所以整理了放在这里,感觉有一天回用到的!

SPOJ:Nth Prime:     求第N个素数,N<1e9。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=,P=,Q=;
struct getnthprime
{
int prime[N+],pi[N+],e[P];
void init(){
for(int i=;i<=N;i++) {
if(!prime[i]) prime[++prime[]]=i,pi[i]=pi[i-]+;
else pi[i]=pi[i-];
for(int j=;j<=prime[]&&i<=N/prime[j];j++) {
prime[i*prime[j]]=;
if(i%prime[j]==) break;
}
}
for(int i=;i<P;i++) e[i]=i;
for(int i=;i<=;i++) {
for(int j=P-;j>=;j--)
e[j]-=e[j/prime[i]];
}
}
ll get_phi(ll m,int n) {
if (n==) return m/P*Q+e[m%P];
if (m<prime[n]) return ;
if (m<=N&&m<=(ll)prime[n]*prime[n]*prime[n]) {
ll ans=pi[m]-n+;
for(int i=n+,l=pi[(int)sqrt(m+0.1)];i<=l;i++)
ans+=pi[m/prime[i]]-i+;
return ans;
}
return get_phi(m,n-)-get_phi(m/prime[n],n-);
} ll get_pi(ll m){
if(m<=N) return pi[m];
int n=pi[(int)cbrt(m-0.1)+];
ll ans=get_phi(m,n)+n-;
for(int i=n+,l=pi[(int)sqrt(m+0.1)];i<=l;i++)
ans-=get_pi(m/prime[i])-i+;
return ans;
} bool f[];
ll get_pn(ll n) {
if (n<=prime[]) return prime[n];
ll x=n*(log(n)+log(log(n))-)+n*(log(log(n))-)/log(n)-*n/;
ll y=n*(log(log(n)))*(log(log(n)))/log(n)/log(n);
y=min(y,ll());
ll l=x,r=x+y,flag = ;
for (int i=;i<;i++) {
ll m=(l+r)>> ;
ll pm=get_pi(m);
if(pm>=n) r=m,flag=;
else l=m+,flag=pm;
}
ll count=flag?flag:get_pi(l-);
for(int i=,li=pi[(int)sqrt(r+0.1)];i<=li;i++) {
for(int j=((l-)/prime[i]+)*prime[i]-l;j<=r-l+;
j+=prime[i]){
f[j]=true;
}
}
for(int i=;i<=r-l+;i++) {
if(!f[i]){
count++;
if(count==n) return i+l;
}
}
return -;
}
}NP; int main() {
NP.init();
ll n; scanf("%lld",&n);
cout<<NP.get_pn(n)<<endl;
return ;
}

HDU5901:Count primes:    求1到N有多少个素数。N<1e11。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N=5e6+,M=,PM=******;
struct countprimes
{
bool np[N],did[N];
int prime[N],pi[N],phi[PM+][M+],sz[M+];
vector<ll>v;
int getprime()
{
int cnt=;
np[]=np[]=true;
pi[]=pi[]=;
for(int i=;i<N;++i){
if(!np[i]) prime[++cnt]=i; pi[i]=cnt;
for(int j=;j<=cnt&&i*prime[j]<N;++j){
np[i*prime[j]]=true;
if(i%prime[j]==) break;
}
} return cnt;
}
void init()
{
getprime();
sz[]=;
for(int i=;i<=PM;++i) phi[i][]=i;
for(int i=;i<=M;++i){
sz[i]=prime[i]*sz[i-];
for(int j=;j<=PM;++j) phi[j][i]=phi[j][i-]-phi[j/prime[i]][i-];
}
}
int sqrt2(ll x)
{
ll r=(ll)sqrt(x-0.1);
while(r*r<=x) ++r;
return int(r-);
}
int sqrt3(ll x)
{
ll r=(ll)cbrt(x-0.1);//开三次方
while(r*r*r<=x) ++r;
return int(r-);
}
ll getphi(ll x,int s)
{
if(s==) return x;
if(s<=M) return phi[x%sz[s]][s]+(x/sz[s])*phi[sz[s]][s];
if(x<=prime[s]*prime[s]) return pi[x]-s+;
if(x<=prime[s]*prime[s]*prime[s]&&x<N)
{
int s2x=pi[sqrt2(x)];
ll ans=pi[x]-(s2x+s-)*(s2x-s+)/;
for(int i=s+;i<=s2x;++i) ans+=pi[x/prime[i]];
return ans;
}
return getphi(x,s-)-getphi(x/prime[s],s-);
}
ll getpi(ll x)
{
if(x<N) return pi[x];
ll ans=getphi(x,pi[sqrt3(x)])+pi[sqrt3(x)]-;
for(int i=pi[sqrt3(x)]+,ed=pi[sqrt2(x)];i<=ed;++i) ans-=getpi(x/prime[i])-i+;
return ans;
}
ll lehmer_pi(ll x)
{
if(x<N) return pi[x];
int a=(int)lehmer_pi(sqrt2(sqrt2(x)));
int b=(int)lehmer_pi(sqrt2(x));
int c=(int)lehmer_pi(sqrt3(x));
ll sum=getphi(x,a)+(ll)(b+a-)*(b-a+)/;
for(int i=a+;i<=b;i++)
{
ll w=x/prime[i];
sum-=lehmer_pi(w);
if(i>c) continue;
ll lim=lehmer_pi(sqrt2(w));
for(int j=i;j<=lim;j++) sum-=lehmer_pi(w/prime[j])-(j-);
}
return sum;
}
}CP;
int main()
{
CP.init();
ll n,ans=;
while(~scanf("%lld",&n)){
cout<<CP.lehmer_pi(n)<<endl;
}
}

Nth prime & numbers of primes (模板)的更多相关文章

  1. HDU 2138 How many prime numbers(Miller_Rabin法判断素数 【*模板】 用到了快速幂算法 )

    How many prime numbers Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/O ...

  2. algorithm@ Sieve of Eratosthenes (素数筛选算法) & Related Problem (Return two prime numbers )

    Sieve of Eratosthenes (素数筛选算法) Given a number n, print all primes smaller than or equal to n. It is ...

  3. Codeforces 385C Bear and Prime Numbers

    题目链接:Codeforces 385C Bear and Prime Numbers 这题告诉我仅仅有询问没有更新通常是不用线段树的.或者说还有比线段树更简单的方法. 用一个sum数组记录前n项和, ...

  4. CodeForces - 385C Bear and Prime Numbers (埃氏筛的美妙用法)

    Recently, the bear started studying data structures and faced the following problem. You are given a ...

  5. 快速切题 sgu113 Nearly prime numbers 难度:0

    113. Nearly prime numbers time limit per test: 0.25 sec. memory limit per test: 4096 KB Nearly prime ...

  6. [Algorithm] Finding Prime numbers - Sieve of Eratosthenes

    Given a number N, the output should be the all the prime numbers which is less than N. The solution ...

  7. POJ 2739. Sum of Consecutive Prime Numbers

    Sum of Consecutive Prime Numbers Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 20050 ...

  8. POJ 2739 Sum of Consecutive Prime Numbers(尺取法)

    题目链接: 传送门 Sum of Consecutive Prime Numbers Time Limit: 1000MS     Memory Limit: 65536K Description S ...

  9. HDOJ(HDU) 2138 How many prime numbers(素数-快速筛选没用上、)

    Problem Description Give you a lot of positive integers, just to find out how many prime numbers the ...

随机推荐

  1. intellij idea 和 myeclipse 转换

    原文出处:http://chinaxxren.iteye.com/blog/893970 当只用 intellij idea 建立 工程 1.首先是new project--->create p ...

  2. 同时在windows和linux环境开发时换行符的处理

    Git 的 core.autocrlf 參數默认为true,即每次 checkin 時,Git 會將純文字類型的檔案中的所有 CRLF 字元轉換為 LF,也就是版本庫中的換行符號一律存成 LF:在 c ...

  3. noip2015提高组day2解题报告

    1.跳石头 题目描述 一年一度的“跳石头”比赛又要开始了! 这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石.组委会已经选择好了两块岩石作为比赛起点和终点.在起点和终点之间,有 N 块岩石( ...

  4. css可见性

    overflow:hidden:       溢出隐藏 visibility:hidden:        隐藏元素,隐藏之后还占据原来的位置 display:none:            隐藏元 ...

  5. HDD磁盘,非4K无以致远

    机械硬盘的未来要靠高容量作为依托,在财报中,希捷表示未来18个月内它们将推出14和16TB机械硬盘,而2020年20TB机械硬盘就将诞生.也有资料显示,3.5英寸100TB硬盘大概在2025年就能面世 ...

  6. 如何删除xcode启动主页面项目列表

    Open Xcode, leave the splash screen up and choose "File", "Open Recent Projects" ...

  7. 全能无线渗透测试工具,一个LAZY就搞定了

    近来一直在研究无线安全方面的东西,特别是在无线渗透测试这块,每次渗透测试时总要来回不停的切换操作和挑选利器,很是麻烦.就想看看是否可以有一款功能全面的集合型工具. 正所谓功夫不负有心人,还真有这么一个 ...

  8. 如何通过SQL注入获取服务器本地文件

    写在前面的话 SQL注入可以称得上是最臭名昭著的安全漏洞了,而SQL注入漏洞也已经给整个网络世界造成了巨大的破坏.针对SQL漏洞,研究人员也已经开发出了多种不同的利用技术来实施攻击,包括非法访问存储在 ...

  9. libxml/HTMLparser.h file not found

    在导入asihttprequest包时出问题导入了libxml2.dylib.可是却提示libxml/HTMLparser.h file not found. 这是由于你的开发环境默认的路径无法找到这 ...

  10. apk程序查找方法调用

    有android killer,现在ida对android的支持等一些方便工具,此篇(关于搜索和修改代码)废弃. 没有好的调试工具下 常用插代码(如果怕影响寄存器值,可以将.locals xxx改多几 ...