求第K大的素数
如题
k=1 输出 2
k=2 输出 3
1=<k<=10000
时间限制 :1S
我的算法(不过好像有点超时。。。)
- C/C++ code
#include <iostream>using namespace std;long f(int *A,int k){ if (k==1) { return 2; } A[0]=2; int i=3; int index; for (;A[k-1]==0;i+=2) { for (index=0;A[index]!=0;++index) { if (i%A[index]==0) { break; } } if (A[index]==0) { A[index]=i; } } return A[k-1];}int main(){ int n=10000; int *A=new int[n]; for (int i=0;i<=n-1;++i) { A[i]=0; } int k; cin>>k; cout<<f(A,k); system("pause"); return 0;}
[解决办法]
确实可以这样判断,求素数可以用筛法,会比这样挨个验证快很多!
可以根据素数的密度,大概估计一个上限,然后用筛法求就行了.
- C# code
private int[] GetPrimeList(int upperValue) { List<int> PrimeList = new List<int>(); bool[] flags = new bool[upperValue + 2]; for (int i = 2; i <= (int)Math.Sqrt(upperValue); i++) { if (!flags[i]) { for (int j = i * i; j <= upperValue; j += i) { flags[j] = true; } } } for (int i = 2; i < upperValue; i++) { if (!flags[i]) { PrimeList.Add(i); } } return PrimeList.ToArray(); }
[解决办法]
[解决办法]