64,642
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
using namespace std;
int pri[10000000] = {0};
void isPri()
{
for (int i = 2; i != 10000000; ++i)
pri[i] = i;
int m = pri[2];
while (m*m <= 10000000) //检测是m的平方是否大于这个数组的最大值
{
int k = m;
while(k <= 10000000)
{
k += m;
pri[k] = 0;
}
++m;
while (!(pri[m])) //寻找下一个最小数 即下一个非零的数
++m;
}
}
int main()
{
isPri();
int cases = 5;
cin>> cases; //测试的次数
for (int i = 0; i != cases; ++i)
{
int tn;
cin>> tn;
int j = 2;
while (tn)
{
if (pri[j])
--tn;
++j;
}
--j;
cout<< pri[j]<< endl;
}
}
//像这样啊
#include <cstdio>
#include <cstring>
using namespace std;
typedef long long int64;
const int MAX_PRIME = 100000;
int PrimeTable[MAX_PRIME];
int IsPrime[MAX_PRIME+1];
int PrimeCnt = 0;
void get_prime()
{
memset(IsPrime, 1, sizeof(IsPrime));
IsPrime[0] = IsPrime[1] = 0;
for (int i = 2 ; i < MAX_PRIME; i++)
if (IsPrime[i])
{
for (long long j = (PrimeTable[PrimeCnt++] = i) * (long long)i; j < MAX_PRIME; j += i)
IsPrime[j] = 0;
}
}
int main(void)
{
get_prime();
int cas;scanf("%d", &cas);
while (cas--)
{
int n;scanf("%d", &n);
printf("%d\n", PrimeTable[n-1]);
}
return 0;
}
//2009-12-10 22:24:37 Accepted 3105 C++ 0.4K 0'00.00" 1132K
#include<stdio.h>
bool tag[100000];
int prime[80000];
int makeprime()
{
int i,j,k;
for(i=2;i<=317;i++)
if(tag[i]==false)
{
j=i*i;
while(j<100000)
{
tag[j]=true;
j+=i;
}
}
for(k=0,i=2;i<100000;i++)
if(tag[i]==false)
prime[++k]=i;
return k;
}
int main()
{
int L,n,T;
L=makeprime();
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
printf("%d\n",prime[n]);
}
return 0;
}