zoukankan      html  css  js  c++  java
  • 2017中国大学生程序设计竞赛-杭州站

    链接:Master of Phi

    题意:求$sum_{dmid n} phi(d)* frac{n}{d}$,其中$n=prod_{i=1}^{m}{p_{i}}^{q_{i}}$

    思路:设$f(n)=sum_{dmid n} phi(d)* frac{n}{d}$,显然$f(n)$是积性函数

    $f(n)=f({p_1}^{c_1}*{p_2}^{c_2}*cdots * {p_m}^{c_m})=f({p_1}^{c_1})*f({p_2}^{c_2})*cdots *f({p_m}^{c_m})$

    由f(n)定义得

    设$n=p^c$,则

    $$f(n)=phi(1)*n+phi(p)*frac{n}{p}+phi(p^2)*frac{n}{p^2}+cdots +phi(p^c)*frac{n}{p^c}$$

    $$f(n)=n+(p-1)*frac{n}{p}+(p^2-p)*frac{n}{p^2}+cdots +(p^c-p^{c-1})*frac{n}{p^c}$$

    $$f(n)=n*(1+c*frac{p-1}{p})=p*c+c*(p-1)*p^{c-1}$$

    $$f(p^c)=p*c+c*(p-1)*p^{c-1}$$

    #include <iostream>
    #include <algorithm>
    #include <cstring>
    #include <cstdio>
    #include <cmath>
    
    using namespace std;
    
    typedef long long ll;
    
    const int N = 30;
    const ll mod = 998244353;
    
    int T, m;
    
    ll power(ll a, ll n)
    {
        ll res = 1;
        while (n) {
            if (n & 1) res = res * a % mod;
            a = a * a % mod;
            n >>= 1;
        }
        return res;
    }
    
    int main()
    {
        // freopen("in.txt", "r", stdin);
        // freopen("out.txt", "w", stdout);
        scanf("%d", &T);
        while (T--) {
            scanf("%d", &m);
            ll res = 1;
            for (int i = 1; i <= m; i++) {
                ll p, c;
                scanf("%lld%lld", &p, &c);
                ll a = power(p, c), b = c * (p - 1) % mod * power(p, c - 1) % mod;
                res = res * ((a + b) % mod) % mod;
            }
            printf("%lld
    ", res);
        }
        return 0;
    }
  • 相关阅读:
    装饰器的写法以及应用环境
    面向对象中super的作用
    os与sys模块的作用与常用方法
    python re模块
    python 冒泡排序,二分法
    正则表达式
    python 高阶内置函数
    python 内置函数
    python 生成器和生成器表达式
    python 函数名的应用(第一类对象),闭包,迭代器
  • 原文地址:https://www.cnblogs.com/zzzzzzy/p/13822254.html
Copyright © 2011-2022 走看看