T311617 「SIOI-1」Help赵曦灼题解
显而易见,这题考的是判断质数,所以我们可以得到以下暴力Code:
#include <bits/stdc++.h>
using namespace std;
int n,q;
bool zhi(int n){
for(int i=2;i<=sqrt(n);i++){
if(n%i==0){
return 0;
}
}
return 1;
}
int main(){
cin>>n;
cin>>q;
while(q--){
int x,ans=0;
cin>>x;
for(int i=2;i*2<=n;i++){
int j=x-i;
if(j<i) continue;
if(zhi(i)&&zhi(j)){
ans++;
}
}
cout<<ans<<endl;
}
return 0;
}
但是,我们发现暴力会TLE,所以我们就要用到埃氏筛法来先筛出质数,这样每次询问就是 \(O(\frac{n}{2})\) 的时间复杂度了,于是我们得到了以下正解Code:
#include <bits/stdc++.h>
using namespace std;
int n,q;
bool zhi[100010];
int main(){
cin>>n;
for(int i=2;i<=n;i++){
if(zhi[i]) continue;
for(int j=2;j*i<=n;j++){
zhi[i*j]=1;
}
}
cin>>q;
while(q--){
int x,ans=0;
cin>>x;
for(int i=2;i*2<=n;i++){
int j=x-i;
if(j<i) continue;
if(zhi[i]==0&&zhi[j]==0){
ans++;
}
}
cout<<ans<<endl;
}
return 0;
}
okk,就酱紫,拜拜ヾ(•ω•`)o

浙公网安备 33010602011771号