zoukankan      html  css  js  c++  java
  • CodeForces

    给定 x ,y

    问有多少个k元组使得其gcd = x, sigma = y , k随意

    首先进行转化,相当于 有多少个k元组满足 gcd = 1,sigma  = y / x 。

    因此容易得出 y % x  != 0 时,输出0

    现在相当于计算有多少个gcd = 1 的组 使得sigma = y / x 。对于这样直接求是不好求的,但是对于不要求gcd = 1 的组数 g(x) 是好求的。

    莫比乌斯反演即可。

    ll getu(ll x) {
        ll v = 1;
        for (ll i = 2; i * i <= x; i++) {
            if (x % i == 0) {
                v = -v, x /= i;
                if (x % i == 0) return 0;
            }
        }
        if (x != 1) v = -v;
        return v;
    }
    
    int main() {
        ll x = readll(), y = readll();
        if (y % x) {
            puts("0");
            return 0;
        }
        x = y / x;
        ll res = 0;
        for (ll i = 1; i * i <= x; i++) {
            if (x % i) continue;
            res = (MOD + res +  getu(i) * (quickPower(2ll,x / i - 1,MOD))) %MOD;
            if (i * i != x) res = (MOD + res + getu(x / i) * (quickPower(2ll,i - 1,MOD))) % MOD;
        }
        Put(res);
    }
  • 相关阅读:
    HDU
    洛谷- P1306 斐波那契公约数
    HDU
    HDU
    POJ3321
    SPOJ
    HDU
    POJ 1236 Network of Schools
    POJ-3169 Layout (差分约束+SPFA)
    POJ-1062 昂贵的聘礼 (最短路)
  • 原文地址:https://www.cnblogs.com/hznumqf/p/13459041.html
Copyright © 2011-2022 走看看