分蛋糕(求满足条件的最小偶数)

EkkaDokka

(要求N是奇数M是偶数并且M还要最小,那么M就从2开始不断+2,判断W/2是否为奇数,如果满足记录此时的M,停止循环)


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.
Ekka和他的朋友Dokka决定买一块蛋糕。他们都喜欢吃蛋糕,这就是为什么他们买了之后想要分享蛋糕的原因。正如它的名字暗示Ekka很喜欢奇数和Dokka很喜欢偶数,他们想把蛋糕这样Ekka得到的N平方厘米,Dokka得到的份额平方厘米,N是奇数和M是偶数。N和M都是正整数。
他们想把蛋糕分成N * M = W,其中W是他们设定的冲劲因子。现在你知道了他们的冲劲因素,你必须知道他们是否能买到想要的蛋糕。


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.
输入从一个整数T(≤10000),表示测试用例的数量。
每个案例都包含一个整数W(2≤W < 263)。W不是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.
对于每个案例,首先打印案例编号。如果他们买不到自己想要的蛋糕,那么在那之后就“不可能”了。如果他们能买到这样的蛋糕,你必须打印N和M。如果有多种解决方案,那么打印出M尽可能小的结果。


Sample Input
3
10
5
12


Sample Output
Case 1: 5 2
Case 2: Impossible
Case 3: 3 4


#include<stdio.h>
#include<cstdio>
#include<iostream>
#include<bits/stdc++.h>
#include<algorithm>
#include<math.h>
using namespace std;
typedef long long ll;
ll num(ll a)
{
    ll i,b=1;
    for(i=2;i<=a;i+=2)
        if(a%i==0&&a/i%2!=0)
        {   b=i;
            return b;
        }
}
int main()
{
    ll t,i,w,j=0;
    scanf("%lld",&t);
    while(t--)
    {   j++;
        scanf("%lld",&w);
        if(w%2!=0)
        {   printf("Case %lld: Impossible\n",j);
            continue;
        }   
        else
        {
            printf("Case %lld: %lld %lld\n",j,w/num(w),num(w));
        }
    }
    return 0;
 } 

猜你喜欢

转载自blog.csdn.net/shf1730797676/article/details/81268868