#include <stdio.h>
#include <stdbool.h>
#include <stdint.h>
int main ( int argc, char * argv[] ) {
int m, n;
bool flag = true;
while( flag ) {
/* a donates height,
* b donates number of worker cats */
long long a, b;
long long sum_a, sum_b;
scanf("%lld %lld", &a, &b);
if(a == 0 && b == 0) {
flag = false;
} else {
if(b == 1) {
sum_a = 0;
sum_b = 0;
while(a >= 1) {
sum_a += 1;
sum_b += a;
a = a / 2;
}
sum_a = sum_a - 1;
printf("%lld %lld\n", sum_a, sum_b);
} else {
/* N should be greater than 1 */
int N;
for(N = 2; N < 10000; N++) {
long long prod = 1;
long long last = 1;
sum_a = last;
int q = 0;
while(prod < b) {
sum_a = last;
last = last * N + 1;
prod = prod * N;
q += 1;
}
if(prod == b) {
int i;
sum_b = 0;
long long dup_a = a;
prod = 1;
bool tick = true;
for(i = 0; i < (q+1); i++) {
sum_b += dup_a * prod;
prod = prod * N;
if(dup_a < 1) tick = false;
dup_a = dup_a / ( 1 + N );
}
if(tick) {
printf("%lld %lld\n", sum_a, sum_b);
N = 10000;
}
}
}
}
}
}
return 0;
}
107 - The Cat in the Hat
最新推荐文章于 2024-06-27 09:35:57 发布
本文介绍了一个使用C语言实现的特殊算法,该算法通过模拟“工作猫”的行为来解决一类数学问题。具体来说,算法接受两个参数a和b,当b为1时,采用一种特定的递减方式计算与a相关的两个累计和;当b大于1时,则尝试找到能够使得b成为特定形式幂次表达式的底数N,并基于此进行进一步计算。
494

被折叠的 条评论
为什么被折叠?



