请注意一下的WA和AC之间只有isprime函数存在区别:如何缩小运行的时间,,
the WA:
#include<stdio.h> #include<cmath> int isprime(int n); int main() { int m,j,a[10001],k=1; a[0]=2; for (j=3;j<=104729;j+=2) if (isprime(j)==1) a[k++]=j; while(scanf("%d",&m)!=EOF) { printf("%d ",a[m-1]); } return 0; } int isprime(int n) //判断素数的方法 { int i=0; int k=(int)sqrt(n); for(i=2;i<=k;k+2555) if (n%i==0) break; if (i>k) return 1; else return 0; }
the AC:
#include<iostream> #include<cmath> using namespace std; int isPrime(int n); int main() { int i,j,flag,s=1,k,A[10000]; A[0]=2; for(i=3;i<=104729;i+=2)//求出前10000个素数 { if(isPrime(i)) A[s++]=i; } while(cin>>k)//输出第k个素数 { cout<<A[k-1]<<endl; } return 0; } int isPrime(int n)//判断素数,从3开始,减少不少计算量 { int flag=1; int k=(int)sqrt(n*1.0)+1; if(n%2==0)flag=0; for(int i=3;i<=k;i+=2) { if(n%i==0) flag=0; } return flag; }