1. 程式人生 > >LIGHT OJ 1116 - Ekka Dokka

LIGHT OJ 1116 - Ekka Dokka

-s border friend pre posit for -h ets 滿足

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