107 - The Cat in the Hat

#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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值