四个质数的和
【题目描述】
给定了一个正整数 N。有多少种方法将 N 分解成为四个质数 a,b,c,d 的和。
例如:9 = 2 + 2 + 2 + 3 = 2 + 2 + 3 + 2 = 2 + 3 + 2 + 2 = 3 + 2 + 2 + 2,故共有 4 种方法将 9 分
解成为四个整数。
【输入格式】
本题多组数据测试:
第一行读入一个整数 T 表示数据组数。
接下来共 T 行,每行包含一个正整数 N。
【输出格式】
共 T 行,每行一个整数表示答案。
【输入样例】
2
9
10
NOIP2019 多校联测-提高组
【输出样例】
4
6
【数据范围】
对于 10%的数据,N≤10。
对于 40%的数据,N≤100。
对于 70%的数据,N≤1000。
对于 100%的数据,T≤10,N≤100000。
代码
#include<cstdio>
#include<cstring>
#define N 100010
#define ll long long
int t,n,k;
int vis[N];
int p[N];
ll ans;
int main()
{
freopen("plus.in","r",stdin);
freopen("plus.out","w",stdout);
p[1]=2;
int cnt=1,nn=N-10;
for(int i=3;i<=nn;i+=2)
if(!vis[i])
{
p[++cnt]=i;
for(int j=i+i;j<=N;j+=i)vis[j]=1;
}
memset(vis,0,sizeof(vis));
for(int i=1;i<=cnt;i++)
for(int j=1;j<=cnt&&p[j]+p[i]<=nn;j++)
vis[p[i]+p[j]]++;
scanf("%d",&t);
while(t--)
{
ans=0;
scanf("%d",&n);
for(int i=4;i<=n-4;i++)
ans+=1ll*vis[i]*vis[n-i];
printf(&