The Cat in the Hat POJ - 1289

时间:2023-03-10 02:29:44
The Cat in the Hat POJ - 1289

题意:给你来两个数A,B  。其中A=(n+1)k, B=nk    输出:(nk-1)/(n-1) 和  ∏ (n+1)k-i ni

思路:关键就是怎么求n和k。本来想这n一定是几个质因数的乘积,那么k一定是其中最小的(B=a1k1 a2 k2 a3 k3....an kn)。

   好了,但是咱有更加简单的办法,那就是利用pow()函数来开k次方!!帅不帅气!

#include<iostream>
#include<cmath>
using namespace std; int POW(int x, int n)
{
int ans = ;
for (; n;n>>=, x*=x)
if (n & )ans *= x;
return ans;
} int main()
{
int A, B;
while (cin >> A >> B, A || B)
{
int n, k;
if (B <= )printf("0 %d\n", A);
else
{
for (int i = ; i <= ; ++i)
{
double h1 = pow(A, 1.0 / i*1.0) - ;
double h2 = pow(B, 1.0 / i*1.0);
if (abs(h1 - h2) < 1e-)
{
n = h1 + 0.5;
k = i;
break;
}
}
int ans1 = POW(n, k) / (n - );
int ans2=;
for (int i = ; i <= k; ++i)
{
ans2 += POW(n + , k - i)*POW(n, i);
}
printf("%d %d\n", ans1, ans2);
}
}
}