解决思路:由题意可知所有的可能情况为
a
x
+
b
y
+
c
z
\small ax+by+cz
ax+by+cz所构成的数的个数,由裴蜀定理可知,
(
a
,
b
,
c
)
\small (a,b,c)
(a,b,c)的倍数且小于
m
a
x
(
a
,
b
,
c
)
\small max(a,b,c)
max(a,b,c)的数减
3
\small 3
3就是答案,记得最后减去已有的三个数。
AC代码
//优化#pragma GCC optimize(2)//C#include<string.h>#include<stdio.h>#include<stdlib.h>#include<math.h>//C++#include<unordered_map>#include<algorithm>#include<iostream>#include<istream>#include<iomanip>#include<climits>#include<cstdio>#include<string>#include<vector>#include<cmath>#include<queue>#include<stack>#include<map>#include<set>//宏定义#define N 2010#define DoIdo main//#define scanf scanf_s#define it set<ll>::iterator//定义+命名空间typedeflonglong ll;typedefunsignedlonglong ull;const ll mod =998244353;const ll INF =1e18;constint maxn =5e6+10;usingnamespace std;//全局变量//函数区
ll max(ll a, ll b){return a > b ? a : b;}
ll min(ll a, ll b){return a < b ? a : b;}
ll gcd(ll a, ll b){return!b ? a :gcd(b, a % b);}//主函数intDoIdo(){
ios::sync_with_stdio(false);
cin.tie(NULL), cout.tie(NULL);int T;
cin >> T;while(T--){
ll a, b, c;
cin >> a >> b >> c;
ll mx =max(a,max(b, c));
ll g =gcd(a, b); g =gcd(g, c);
ll ans = mx / g;
cout << ans -3<< endl;}return0;}//分割线---------------------------------QWQ/*
*/