• Maximum splitting(找规律+思维)


    Maximum splitting

     CodeForces - 872C 

    You are given several queries. In the i-th query you are given a single positive integer ni. You are to represent ni as a sum of maximum possible number of composite summands and print this maximum number, or print -1, if there are no such splittings.

    An integer greater than 1 is composite, if it is not prime, i.e. if it has positive divisors not equal to 1 and the integer itself.

    Input

    The first line contains single integer q (1 ≤ q ≤ 105) — the number of queries.

    q lines follow. The (i + 1)-th line contains single integer ni (1 ≤ ni ≤ 109) — the i-th query.

    Output

    For each query print the maximum possible number of summands in a valid splitting to composite summands, or -1, if there are no such splittings.

    Examples

    Input
    1
    12
    Output
    3
    Input
    2
    6
    8
    Output
    1
    2
    Input
    3
    1
    2
    3
    Output
    -1
    -1
    -1

    Note

    12 = 4 + 4 + 4 = 4 + 8 = 6 + 6 = 12, but the first splitting has the maximum possible number of summands.

    8 = 4 + 4, 6 can't be split into several composite summands.

    1, 2, 3 are less than any composite number, so they do not have valid splittings.

    题意:给你一个数n,问你他最多能划分为几种几个合数的和 

    题解:最小的偶数合数是4,最小的奇数合数是9 

    四种情况:

        (1)n%4 == 0:

          全分成4就好了,所以ans = n/4

        (2)n%4 == 1:

          剩下的1要和两个4组合成一个9。

          所以如果n/4 >= 2,ans = n/4 - 1

          否则ans = -1

        (3)n%4 == 2:

          剩下的2要和一个4组合成一个6。

          所以如果n/4 >= 1,ans = n/4

          否则ans = -1

        (4)n%4 == 3:

          剩下的3 = 1 + 2。所以需要三个4,组成一个6和一个9。

          所以如果n/4 >= 3,ans = n/4 - 1

    也可以找规律:

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 using namespace std;
     6 int main()
     7 {
     8     int q,n;
     9     cin>>q;
    10     while(q--)
    11     {
    12         scanf("%d",&n);
    13         if(n==1||n==2||n==3||n==5||n==7||n==11)
    14             printf("-1
    ");
    15         else
    16         {
    17             int ans=n/4;
    18                 if(n%2==0)
    19                     printf("%d
    ",ans);
    20                 if(n%2==1)
    21                     printf("%d
    ",ans-1);
    22             }
    23         }
    24 }
  • 相关阅读:
    Thread之六:线程创建方法
    MySQL优化技巧之四(数据库设计中的一些技巧)
    数据库设计三大范式
    分布式事务之:TCC (Try-Confirm-Cancel) 模式
    spring AOP 之五:Spring MVC通过AOP切面编程来拦截controller
    Thread之五:线程的优先级
    分布式事务之:TCC几个框架的测试情况记录
    spring AOP 之四:@AspectJ切入点标识符语法详解
    IP地址漂移的实现与原理
    高可用集群heartbeat全攻略
  • 原文地址:https://www.cnblogs.com/1013star/p/9624364.html
Copyright © 2020-2023  润新知