9.7多校联考

本博客主要介绍了三道数论与算法相关的竞赛题目,包括:四个质数的和问题,求解最大异或值的匹配问题,以及树上染色相邻边的操作。每道题目都详细描述了问题背景、输入输出格式,并给出了样例测试用例。此外,还提供了部分代码作为解题思路的参考。
摘要由CSDN通过智能技术生成

四个质数的和


【题目描述】
给定了一个正整数 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(&
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值