• 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);
    }
  • 相关阅读:
    常用的Dos命令
    关于CSS3
    数据渲染
    jQuery中的AJAX
    AJAX
    面向对象3
    克隆对象、对象继承
    面向对象2
    面向对象1
    面向对象
  • 原文地址:https://www.cnblogs.com/hznumqf/p/13459041.html
Copyright © 2020-2023  润新知