居然还有y%x不等于0的特殊情况

zhangwch  •  1年前


若P = gcd ** k1,Q = gcd * * k2
那么x0就是gcd,y0就是gcd x k1 x k2
目标是把k1 x k2 分成两个数的乘积,分别给P和Q,同时保证k1和k2互质(否则gcd就会更大一点)

#include <iostream>
using namespace std;

int gcd(int x, int y) {
    if (y == 0) return x;
    return gcd(y, x % y);
}

int main() {
    int x, y;
    cin >> x >> y;
    if (y % x != 0) {
        cout << 0;
        return 0;
    }
    
    int gd = x;
    int k = y / x;
    int cnt = 1;
    for (int i = 2; i <= k / i; i++) {
        if (k % i == 0) {
            if (gcd(i, k / i) == 1) {
                // cout << i << " " << k / i << " " << gcd(i, k/i) << endl;
                cnt++;
            }
            
        }
    }
    cout << cnt * 2;
    return 0;
}

评论: