|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
这是我写的代码,M是10000就正常运行,为什么M是100000就不行。
- #include <stdio.h>
- #define M 100000
- bool mark[M];
- void init()
- {
- for(int i = 1; i < M;i++)
- {
- mark[i] = false;//初始化均未标记
- }
- for (int i = 2; i < M; i++)
- {
- if(mark[i] == true)
- {//如果是非素数
- continue;
- }
- for(int j = i * i; j < M; j = j + i)
- {
- mark[j] = true;//将素数的倍数标记为非素数
- }
- }
- }
- int main()
- {//求第k个素数
- init();
- int n;
- while(scanf("%d",&n) != EOF)
- {
- for (int i = 2; i < M; i++)
- {
- if(mark[i] == false)
- {//该数为素数
- n--;
- if(!n)
- {
- printf("%d\n",i);
- }
- }
- }
- }
- return 0;
- }
复制代码
但是我看人家写的代码,数组也是开到一百万了都能正常运行,这是别人写的代码。
- #include<iostream>
- #include<string.h>
- #include<stdio.h>
- using namespace std;
- #define M 1000010
- bool flag[M];
- int prime[M];
- void getprime()
- {
- int cnt=1;
- for(int i=2;i<M;++i)
- {
- if(!flag[i])
- {
- prime[cnt++]=i;
- for(int j=i;j<M;j+=i)
- flag[j]=true;
- }
- }
- }
- int main(int argc, char *argv[])
- {
- int k;
- // freopen("1040.in","r",stdin);
- getprime();
- prime[0]=0;
- while(scanf("%d",&k)!=EOF)
- {
- printf("%d\n",prime[k]);
- }
- return 0;
- }
复制代码 |
|