素数的判断
bool isPrime(int n)
{
if(n<=1) return false;
for(int i=2;i*i<=n;i++)
{
if(n%i==0) return false;
}
return true;
}
埃氏筛法
#include<bits/stdc++.h>
using namespace std;
const int maxn = 101;
//p数组存放素数i对应的bool值
bool p[maxn] = {0};
//pNum为素数的个数
//prime数组存放素数
int prime[maxn], pNum = 0;
void findPrime()
{
for(int i = 2; i < maxn; i++)
{
if(p[i] == false)
{
prime[pNum++] = i;
for(int j = i + i; j < maxn; j += i)
{
p[j] = true;
}
}
}
}
int main()
{
memset(prime, 0, sizeof(int) * maxn);
findPrime();
for(int i = 0; i < pNum; i++)
{
cout << prime[i] << " ";
}
cout << '\n';
return 0;
}
样例运行结果:
PAT 1013
C++代码
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1000000;
//p数组存放素数i对应的bool值
bool p[maxn] = {0};
//pNum为素数的个数
//prime数组存放素数
int prime[maxn], pNum = 1;
void findPrime()
{
for(int i = 2; i < maxn; i++)
{
if(p[i] == false)
{
prime[pNum++] = i;
for(int j = i + i; j < maxn; j += i)
{
p[j] = true;
}
}
}
}
int main()
{
memset(prime, 0, sizeof(int) * maxn);
findPrime();
int m, n;
cin >> m >> n;
int cnt = 0;
for(int i = m; i <= n; i++)
{
cout << prime[i];
++cnt;
if(cnt % 10 != 0 && i < n)
{
cout << " ";
}
else
{
cout << '\n';
}
}
return 0;
}
做了无数次,我特么终于过了啊!
问题 B: Prime Number
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1000000;
//p数组存放素数i对应的bool值
bool p[maxn] = {0};
//pNum为素数的个数
//prime数组存放素数
int prime[maxn], pNum = 1;
void findPrime()
{
for(int i = 2; i < maxn; i++)
{
if(p[i] == false)
{
prime[pNum++] = i;
for(int j = i + i; j < maxn; j += i)
{
p[j] = true;
}
}
}
}
int main()
{
memset(prime, 0, sizeof(int) * maxn);
findPrime();
int m;
while(cin >> m)
{
cout << prime[m] << endl;
}
return 0;
}
样例运行结果: