LIGHT OJ 1116 - Ekka Dokka

Posted zhangzehua

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LIGHT OJ 1116 - Ekka Dokka相关的知识,希望对你有一定的参考价值。

Ekka and his friend Dokka decided to buy a cake. They both love cakes and that‘s why they want to share the cake after buying it. As the name suggested that Ekka is very fond of odd numbers and Dokka is very fond of even numbers, they want to divide the cake such that Ekka gets a share of N square centimeters and Dokka gets a share of M square centimeters where N is odd and M is even. Both N and M are positive integers.

They want to divide the cake such that N * M = W, where W is the dashing factor set by them. Now you know their dashing factor, you have to find whether they can buy the desired cake or not.

Input

Input starts with an integer T (≤ 10000), denoting the number of test cases.

Each case contains an integer W (2 ≤ W < 263). And W will not be a power of 2.

Output

For each case, print the case number first. After that print "Impossible" if they can‘t buy their desired cake. If they can buy such a cake, you have to print N and M. If there are multiple solutions, then print the result where M is as small as possible.

Sample Input

Output for Sample Input

3

10

5

12

Case 1: 5 2

Case 2: Impossible

Case 3: 3 4

 

题意概要:给你一个数字W,W不是2的任何正整数次幂,要求你给出N和M两个数
N和M要满足下面要求。
N*M=W
N为奇数
M为偶数
M要尽量的小
 
分析:
当我们通过W找N和M时。
我们可以将W分离成若干个质因子。
W所有偶数的质因子的乘积就是M
W所有奇数的质因子的乘积就是N
因为M是W所有偶数质因子的乘积,所以不会有比M更小的满足N*M=W且N为奇数的数。
(既是偶数又是质数的只有2,所有如果存在M,M必定是2的整数幂,可以利用这个特点便捷计算M,从而求出N)
 
代码:
#include <cstdio>
#include <cstring>
#include <math.h>
#define ll long long

int main()
{
    int T,Case=1,ans;
    ll w,m;
    scanf("%d",&T);
    while(T--)
    {
        m=2;
        ans=0;
        scanf("%lld",&w);
        while(m<=w/2)///这句话既是终止条件也是为了防止long long类型溢出
        {
            if(w%m==0&&(w/m)%2==1)
            {
                ans=1;
                break;
            }
            m*=2;
        }

        if(ans)
            printf("Case %d: %lld %lld\n",Case++,w/m,m);
        else
            printf("Case %d: Impossible\n",Case++);
    }
    return 0;
}

 

以上是关于LIGHT OJ 1116 - Ekka Dokka的主要内容,如果未能解决你的问题,请参考以下文章

(light OJ 1005) Rooks dp

Light oj 1422 - Halloween Costumes

(状压) Brush (IV) (Light OJ 1018)

light oj 1317

light oj1074

Light oj 1379 -- 最短路