对于给定的一个正整数n, 判断n是否能分红若干个正整数之和 (能够重复) ,
其中每一个正整数都能表示成两个质数乘积。ios
第一行一个正整数 q,表示询问组数。
接下来 q 行,每行一个正整数 n,表示询问。code
q 行,每行一个正整数,为 0 或 1。0 表示不能,1 表示能。get
$\texttt{input#1}$
5
1
4
5
21
25input
$\texttt{output#1}$
0
1
0
1
1string
样例解释:
4 = 2 * 2
21 = 6 + 15 = 2 * 3+3 * 5
25 = 6 + 9 + 10 = 2 * 3+3 * 3+2 * 5
25 = 4 + 4 + 4 + 4 + 9 = 2 * 2+2 * 2+2 * 2+2 * 2+3 * 3it
30%的数据知足:q<=20,n<=20
60%的数据知足:q<=10000,n<=5000
100%的数据知足:q<=10^5,n<=10^18io
4x + 6y 能够凑出大于等于4的所有偶数,又由于4x + 6y 能够拆成x个2 * 2及y个2 * 3相加。因此大于等于4的偶数所有可拆。大于等于13的奇数彻底能够表示成大于等于4的偶数加9,大于等于4的偶数所有可拆,9也可拆,因此大于等于13的奇数也可拆。小于等于12的数中4,6,8,9,10,12是可拆的,0,1,2,3,5,7,11是不可拆的。因此大于等于12的全可拆,小于12的只有4,6,8,9,10可拆。class
#include<iostream> #include<cstring> #include<string> #include<cstdio> #include<algorithm> typedef long long ll; ll q,n; inline void read(ll &T) { ll x=0;bool f=0;char c=getchar(); while(c<'0'||c>'9'){if(c=='-')f=!f;c=getchar();} while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();} T=f?-x:x; } int main() { read(q); while(q--) { read(n); if(n>=12) puts("1"); else { if(n==4||n==6||n==8||n==9||n==10) puts("1"); else puts("0"); } } return 0; }