列表

详情


NC227342. 简单的序列

描述

你需要找到一个序列 并且每个 A_i 都为质数或者 或者 使得



对于每个询问,你需要找到最小的

数据保证题目有解。

特别的是,如果  那么你也至少需要一个 来填满它。

输入描述

第一行,一个整数  ,表示有  组数据。

接下来 行,每行一个数 如题目所述。

输出描述

一共输出  组。

假如你找到的答案是 : 以及序列

输出的格式如下:


示例1

输入:

1
11

输出:

1
11 = 11

示例2

输入:

1
545

输出:

3
1 + 3 + 541 = 545

示例3

输入:

1
0

输出:

1
0 = 0

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 115ms, 内存消耗: 10204K, 提交时间: 2021-10-15 19:15:19

#include<bits/stdc++.h>
using namespace std;
#define For(i,x,y)for(i=x;i<=(y);i++)
const int LIM=10000000;
bool p[10000005];
int main()
{
	int t,i,j,s;
	cin>>t;
	For(i,2,LIM)
	if(!p[i])
	for(j=i+i;j<=LIM;j+=i)p[j]=1;
	while(t--)
	{
		cin>>s;
		if(s<4||!p[s])cout<<1<<endl<<s<<" = "<<s<<endl;
		else if(!p[s-2])cout<<2<<endl<<2<<" + "<<s-2<<" = "<<s<<endl;
		else if(!(s&1))
		{
			cout<<2<<endl;
			For(i,2,s)
			if(!p[i]&&!p[s-i])break;
			cout<<i<<" + "<<s-i<<" = "<<s<<endl;
		}
		else
		{
			cout<<3<<endl<<1<<" + ";
			For(i,2,s-1)
			if(!p[i]&&!p[s-1-i])break;
			cout<<i<<" + "<<s-1-i<<" = "<<s<<endl;
		}
	}
	return 0;
}

上一题