2523. 吃蛋糕

题目描述

Beny 想要用蛋糕填饱肚子。Beny 一共想吃体积为 c 的蛋糕,他发现有两种蛋糕可以吃,一种体积为 a,一种体积为 b,但两种蛋糕各有特色。Beny 想知道他一共有多少种不同吃法, 使得他恰好可以填饱肚子。


输入

t第一行一个 t
接下来 t 行,每行三个正整数 a,b,c。

输出

对于每个 a,b,c,输出一个整数表示有几种不同吃法。


样例输入

样例输入1
3
2 3 4
3 4 24
3 7 11
 
样例输入2
4
12 13 1003
56 44 792
4616 5364 836482148
3836501 7035978 77151863500136

样例输出

样例输出 1
1
3
0

样例输出 2
6
2
135
3


思路

        我们假设Beny吃x块a蛋糕,y块b蛋糕,则得出式子ax+by=c(a,b,c已知)

        这便是一道扩展欧几里得。我们先设g表示gcd(a,b),先判断c 能否整除g,若不,直接输出0。再用a,b,c分别除以c,再分别算出x和y。若y<0,直接输出0,否则输出\frac{a}{y}+1


具体代码

#include<cstdio>
using namespace std;
long long t,a,b,c,k,g,g1,x,y;
long long exgcd(long long a,long long b)
{
	if (b==0)
	{
		x=1;y=0;
		return a;
	}
	else
	{
		long long t1=exgcd(b,a%b);
		long long xx=x;
		x=y;
		y=xx-a/b*y;
		return t1;
	}
}
int main()
{
	scanf("%lld",&t);
	while(t--)
	{
		scanf("%lld%lld%lld",&a,&b,&c);
		g=exgcd(a,b);
		if (c%g!=0)
		{
			printf("0\n");
			continue;
		}
		long long cc,xx=x;
		a/=g;b/=g;c/=g;
		x=(((x%b)*(c%b))%b+b)%b;
		y=(c-a*x)/b;
		if (y<0)
		{
			printf("0\n");
		}
		else
		{
			printf("%lld\n",y/a+1);
		}
	}
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值