二十分代码求条
查看原帖
二十分代码求条
1070982
Guoguo2013楼主2024/8/24 22:43
#include<bits/stdc++.h>
#define int long long
#define PII pair< int, int >
#define MII map< int, int >
#define MIB map< int, bool >

using namespace std;

const int N = 5e4 + 5, mod = 998244353;
int T, primes[N], cnt, x, gcd, y, lcm, daan;
bool st[N];

template<typename T>inline void read(T &x){bool f=1;x=0;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-') f=!f;ch=getchar();}while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}x=(f?x:-x);return;}
int ksm(int a, int b, int p){int ans = 1;while(b){if(b & 1)ans =(ans*a)%p;b >>= 1;a = (a*a) % p;}return ans;}
void get_primes(){
    for (int i = 2; i <= N; i++){
        if (!st[i]) primes[++cnt] = i;
        for (int j = 1; primes[j] <= N / i; j++){
            if (primes[j] > st[i]) break;
            st[primes[j] * i] = true;
        }
    }
}
void solve(){
	read(x);
	read(gcd);
	read(y);
	read(lcm);
	daan = 1;
	for (int i = 1; i <= cnt; i++){
		int a = 0, b = 0, c = 0, d = 0;
		while (x % primes[i] == 0){
			a++;
			x /= primes[i];
		}
		while (gcd % primes[i] == 0){
			b++;
			gcd /= primes[i];
		}
		while (y % primes[i] == 0){
			c++;
			y /= primes[i];
		}
		while (lcm % primes[i] == 0){
			d++;
			lcm /= primes[i];
		}
		if (a != b && c != d) daan *= 0;
		else {
			if (a != b || c != d) daan *= 1;
			else daan = daan * max(0ll, c - a + 1);
		}
	}
	if (x != 1 || gcd != 1 || y != 1 || lcm != 1){
		if (x != gcd && y != lcm) daan *= 0;
		else {
			if (x != gcd || y != lcm) daan *= 1;
			else daan = daan * max(0ll, y - x + 1);
		}
	}
	printf("%lld\n", daan);
}
signed main(){
//	freopen("a.in", "r", stdin);
//	freopen("a.out","w",stdout);
	read(T);
	get_primes();
	while (T--) solve();
	return 0;
}

#1 ~ #3 AC,#4 ~ #9 WA,#10 ~ #11 TLE

2024/8/24 22:43
加载中...