NC227342. 简单的序列
描述
输入描述
第一行,一个整数 ,表示有 组数据。
接下来 行,每行一个数 如题目所述。
输出描述
一共输出 组。假如你找到的答案是 : 以及序列 。输出的格式如下:
示例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; }