zoukankan      html  css  js  c++  java
  • 【CSP-S膜你考】 A

    A

    题面

    对于给定的一个正整数n, 判断n是否能分成若干个正整数之和 (可以重复) ,
    其中每个正整数都能表示成两个质数乘积。

    输入格式

    第一行一个正整数 q,表示询问组数。
    接下来 q 行,每行一个正整数 n,表示询问。

    输出格式

    q 行,每行一个正整数,为 0 或 1。0 表示不能,1 表示能。

    样例

    ( exttt{input#1})
    5
    1
    4
    5
    21
    25

    ( exttt{output#1})
    0
    1
    0
    1
    1

    数据范围与提示

    样例解释:
    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 * 3

    30%的数据满足:q<=20,n<=20
    60%的数据满足:q<=10000,n<=5000
    100%的数据满足:q<=10^5,n<=10^18


    题解

    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可拆。


    (Code)

    #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;
    }
    
  • 相关阅读:
    POJ——T2186 Popular Cows || 洛谷——P2341 [HAOI2006]受欢迎的牛
    Tarjan缩点【模板】
    shell(1):网络配置、BATH环境和通配符
    STL
    J
    H
    G
    模板整理(二)
    B
    0-1背包问题
  • 原文地址:https://www.cnblogs.com/poi-bolg-poi/p/11685758.html
Copyright © 2011-2022 走看看