hdu 1216

来源:互联网 发布:ipo 净利润 数据 编辑:程序博客网 时间:2024/06/14 14:30

主题思想: 简单模拟,打表

先执行一遍,算出第3000个数的大小,然后,以第3000个数,为上限,申请数组空间,和执行初始化,最后AC

#include <iostream>#include<cstdio>#include<cstring>#include<cmath>using namespace std;const int INF=34000;const int maxn=3005;int prim[maxn];bool visited[INF];bool isPrime(int n){    int m=sqrt(n);    if(n==2||n==3||n==5||n==7) return true;    if(n%2==0||n%3==0||n%5==0||n%7==0) return false;    for(int i=2;i<=m;i++){        if(n%i==0) return false;    }    return  true;}void init(){    int cnt=0;    memset(visited,false,sizeof(visited));    for(int i=2;i<INF;i++){       if(!visited[i])prim[++cnt]=i;       else continue;       if(cnt>3000) break;       int tmp=0;       for(int j=i+1;j<INF;j++){            if(!visited[j]){                tmp++;                if(tmp%i==0)visited[j]=true;            }       }    }}int main(){    int n;    init();    while(scanf("%d",&n)!=EOF){        if(n==0) break;        printf("%d\n",prim[n]);    }    return 0;}
原创粉丝点击