

签到题,直接枚举([2,n/2]因为其他的都是对称的)就OK,当然在判断素数的时候不能judge函数,因为用了judge肯定TLE了。
AC代码:
#include<map>
#include<list>
#include<ctime>
#include<queue>
#include<deque>
#include<cmath>
#include<stack>
#include<string>
#include<cstdlib>
#include<cstring>
#include <iostream>
#include<algorithm>
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
//ll gcd(ll a,ll b){
// return b?gcd(b,a%b):a;
//}
//ll QP(ll x,ll n,ll Mod){
// ll res=1;
// while(n){
// if(n&1){
// res=(res*x)%Mod;
// }
// x=(x*x)%Mod;
// n>>=1;
// }
// return res;
//}
const int N = 1e7 + 10;
int pri[700010], k;//k记录素数的个数这里的素数是从下标为0开始的
bool Isprime[N];
void prime()
{
k = 0;
memset(Isprime, true, sizeof(Isprime));
Isprime[1] = false;
for(int i = 2 ; i < N ; i++)
{
if(Isprime[i])
{
pri[k++] = i;
for(int j = 2 ; i * j < N ;j++)
Isprime[i * j] = false;
}
}
}
int main(){
ios_base::sync_with_stdio(false);
prime();
int T,n,ans,g=1;
scanf("%d",&T);
while(T--){
ans=0;
scanf("%d",&n);
int i;
for( i=0;i<k&&pri[i]<=n/2;i++){
if(Isprime[n-pri[i]]){
ans++;
}
}
printf("Case %d: %d\n",g++,ans);
}
return 0;
}
本文介绍了一种求解特定范围内素数对数量的高效算法。通过预处理生成素数表,并利用该表快速判断一个数是否为素数,从而在给定区间内找出所有素数对。
519

被折叠的 条评论
为什么被折叠?



