1、判断质数
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
bool isprime(int n)
{
if(n<2)
return false;
if(n==2) return true;
if(n%2==0) return false;
int i,j;
for(i=3;i<=sqrt(n);++i)
{
if(n%i==0) return false;
}
return true;
}
int main(){
int n;
cin>>n;
cout<<isprime(n)<<endl;
return 0;
}
2、求n以内质数(完美世界)
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
vector<int> res;
vector<int> CalP(int n)
{
if(n<2)
return res;
res.push_back(2);
int i,j;
for(i=3;i<=n;++i)
{
for(j=0;j<res.size()&&res[j]<=sqrt(i);++j)
{
if(i%res[j]==0)
break;
}
if(j==res.size()||res[j]>sqrt(i))
res.push_back(i);
}
return res;
}
int main(){
int n;
cin>>n;
CalP(n);
for(int i=0;i<res.size();i++){
cout<<res[i]<<endl;
}
return 0;
}
3、质数对(腾讯)
#法一 判断i和n-i都是质数
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
bool isprime(int n)
{
if(n<2)
return false;
if(n==2) return true;
if(n%2==0) return false;
int i,j;
for(i=3;i<=sqrt(n);++i)
{
if(n%i==0) return false;
}
return true;
}
int main(){
int n;
int res=0;
cin>>n;
if(isprime(n-2)) res++;
for(int i=3;i<=n/2;i++){
if(isprime(i)&&isprime(n-i)) res++;
}
cout<<res<<endl;
return 0;
}
#法二 先求n以内的质数vector,再2sum 碰撞指针
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
vector<int> res;
vector<int> CalP(int n)
{
if(n<2)
return res;
res.push_back(2);
int i,j;
for(i=3;i<=n;++i)
{
for(j=0;j<res.size()&&res[j]<=sqrt(i);++j)
{
if(i%res[j]==0)
break;
}
if(j==res.size()||res[j]>sqrt(i))
res.push_back(i);
}
return res;
}
int main(){
int n;
cin>>n;
CalP(n);
int l=0;
int r=res.size()-1;
int ans=0;
while(l<=r){
if(res[l]+res[r]==n) {
ans+=1;
l++;
r--;
}
else if(res[l]+res[r]<n) {
l++;
}
else if(res[l]+res[r]>n) {
r--;
}
}
cout<<ans<<endl;
return 0;
}