The 2019 ICPC Asia Yinchuan Regional Programming Contest/2019银川区域赛 D Easy Problem(莫比乌斯反演+欧拉降幂)

2023-11-13

题意

给你 n , m , d , k n,m,d,k n,m,d,k计算下列式子
∑ i 1 = 1 m ∑ i 2 = 1 m ∑ i 3 = 1 m ⋯ ∑ i n = 1 m [ g c d ( i 1 , i 2 , i 3 , ⋯   , i n ) = = d ] ( i 1 i 2 i 3 ⋯ i n ) k \sum_{i_1=1}^m\sum_{i_2=1}^m\sum_{i_3=1}^m\cdots\sum_{i_n=1}^m[gcd(i_1,i_2,i_3,\cdots,i_n)==d](i_1i_2i_3\cdots i_n)^k i1=1mi2=1mi3=1min=1m[gcd(i1,i2,i3,,in)==d](i1i2i3in)k
其中 1 ≤ n ≤ 1 0 100000 , 1 ≤ m , d ≤ 100000 , 1 ≤ k ≤ 1 0 9 1\le n\le 10^{100000},1\le m,d\le100000,1\le k\le10^9 1n10100000,1m,d100000,1k109

思路

先提出一个 d d d
∑ i 1 = 1 m d ∑ i 2 = 1 m d ∑ i 3 = 1 m d ⋯ ∑ i n = 1 m d [ g c d ( i 1 , i 2 , i 3 , ⋯   , i n ) = = 1 ] d k n ( i 1 i 2 i 3 ⋯ i n ) k \sum_{i_1=1}^{\frac{m}{d}}\sum_{i_2=1}^{\frac{m}{d}}\sum_{i_3=1}^{\frac{m}{d}}\cdots\sum_{i_n=1}^{\frac{m}{d}}[gcd(i_1,i_2,i_3,\cdots,i_n)==1]d^{kn}(i_1i_2i_3\cdots i_n)^k i1=1dmi2=1dmi3=1dmin=1dm[gcd(i1,i2,i3,,in)==1]dkn(i1i2i3in)k
d k n ∑ i 1 = 1 m d ∑ i 2 = 1 m d ∑ i 3 = 1 m d ⋯ ∑ i n = 1 m d [ g c d ( i 1 , i 2 , i 3 , ⋯   , i n ) = = 1 ] ( i 1 i 2 i 3 ⋯ i n ) k d^{kn}\sum_{i_1=1}^{\frac{m}{d}}\sum_{i_2=1}^{\frac{m}{d}}\sum_{i_3=1}^{\frac{m}{d}}\cdots\sum_{i_n=1}^{\frac{m}{d}}[gcd(i_1,i_2,i_3,\cdots,i_n)==1](i_1i_2i_3\cdots i_n)^k dkni1=1dmi2=1dmi3=1dmin=1dm[gcd(i1,i2,i3,,in)==1](i1i2i3in)k
再将 ∑ j ∣ g c d ( i 1 , i 2 , i 3 , ⋯   , i n ) μ ( j ) = [ g c d ( i 1 , i 2 , i 3 , ⋯   , i n ) = = 1 ] \sum_{j|gcd(i_1,i_2,i_3,\cdots,i_n)}\mu(j)=[gcd(i_1,i_2,i_3,\cdots,i_n)==1] jgcd(i1,i2,i3,,in)μ(j)=[gcd(i1,i2,i3,,in)==1]带入
d k n ∑ i 1 = 1 m d ∑ i 2 = 1 m d ∑ i 3 = 1 m d ⋯ ∑ i n = 1 m d ∑ j ∣ g c d ( i 1 , i 2 , i 3 , ⋯   , i n ) μ ( j ) ( i 1 i 2 i 3 ⋯ i n ) k d^{kn}\sum_{i_1=1}^{\frac{m}{d}}\sum_{i_2=1}^{\frac{m}{d}}\sum_{i_3=1}^{\frac{m}{d}}\cdots\sum_{i_n=1}^{\frac{m}{d}}\sum_{j|gcd(i_1,i_2,i_3,\cdots,i_n)}\mu(j)(i_1i_2i_3\cdots i_n)^k dkni1=1dmi2=1dmi3=1dmin=1dmjgcd(i1,i2,i3,,in)μ(j)(i1i2i3in)k
原来是枚举 g c d gcd gcd的因子我们可以换成枚举他的倍数
d k n ∑ j = 1 m d μ ( j ) ∑ i 1 = 1 m d j ∑ i 2 = 1 m d j ∑ i 3 = 1 m d j ⋯ ∑ i n = 1 m d j j k n ( i 1 i 2 i 3 ⋯ i n ) k d^{kn}\sum_{j=1}^{\frac{m}{d}}\mu(j)\sum_{i_1=1}^{\frac{m}{dj}}\sum_{i_2=1}^{\frac{m}{dj}}\sum_{i_3=1}^{\frac{m}{dj}}\cdots\sum_{i_n=1}^{\frac{m}{dj}}j^{kn}(i_1i_2i_3\cdots i_n)^k dknj=1dmμ(j)i1=1djmi2=1djmi3=1djmin=1djmjkn(i1i2i3in)k
d k n ∑ j = 1 m d μ ( j ) j k n ∑ i 1 = 1 m d j ∑ i 2 = 1 m d j ∑ i 3 = 1 m d j ⋯ ∑ i n = 1 m d j ( i 1 i 2 i 3 ⋯ i n ) k d^{kn}\sum_{j=1}^{\frac{m}{d}}\mu(j)j^{kn}\sum_{i_1=1}^{\frac{m}{dj}}\sum_{i_2=1}^{\frac{m}{dj}}\sum_{i_3=1}^{\frac{m}{dj}}\cdots\sum_{i_n=1}^{\frac{m}{dj}}(i_1i_2i_3\cdots i_n)^k dknj=1dmμ(j)jkni1=1djmi2=1djmi3=1djmin=1djm(i1i2i3in)k
乘积展开可以为k次幂的和,只要预处理小于m的k次幂和就可以做了
d k n ∑ j = 1 m d μ ( j ) j k n ( 1 k + 2 k + 3 k + ⋯ + ( m d j ) k ) n d^{kn}\sum_{j=1}^{\frac{m}{d}}\mu(j)j^{kn}(1^k+2^k+3^k+\cdots+(\frac{m}{dj})^k)^n dknj=1dmμ(j)jkn(1k+2k+3k++(djm)k)n
n比较大,用欧拉降幂

#include <bits/stdc++.h>
using namespace std;
const int N=1e5+5;
const int mod=59964251;
const int phi=59870352;
int mu[N];
int prime[N];
int vis[N];
int cnt;
long long sum[N];
char str[N];
void init()
{
    mu[1]=1;
    for(int i=2; i<N; i++)
    {
        if(!vis[i])
        {
            prime[cnt++]=i;
            mu[i]=-1;
        }
        for(int j=0; j<cnt&&i*prime[j]<N; j++)
        {
            vis[prime[j]*i]=1;
            if(i%prime[j]==0)
            {
                mu[i*prime[j]]=0;
                break;
            }
            else
                mu[i*prime[j]]=-mu[i];
        }
    }
}
long long quickmod(long long a,long long b)
{
    long long ans=1;
    while(b)
    {
        if(b%2==1)
            ans=ans*a%mod;
        b=b/2;
        a=a*a%mod;
    }
    return ans;
}
int main()
{
    init();
    int t;
    scanf("%d",&t);
    while(t--)
    {
        long long m,d,k;
        scanf("%s%lld%lld%lld",str,&m,&d,&k);
        m/=d;
        sum[0]=0;
        for(int i=1; i<=m; i++)
            sum[i]=(sum[i-1]+quickmod(i,k))%mod;
        int len=strlen(str);
        int flag=0;
        long long n=0;
        for(int i=0; i<len; i++)
        {
            n=n*10+str[i]-'0';
            n=n%phi;
        }
        long long ans=0;
        for(int i=1; i<=m; i++)
        {
            ans=(ans+mu[i]*quickmod(i,k*n%phi+phi)%mod*quickmod(sum[m/i],n+phi)%mod+mod)%mod;
        }
        ans=ans*quickmod(d,k*n%phi+phi)%mod;
        printf("%lld\n",ans);
    }
    return 0;
}
/*
59870352
*/

/*
1
1000000000 100000 100000 1000000000
38069446
*/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

The 2019 ICPC Asia Yinchuan Regional Programming Contest/2019银川区域赛 D Easy Problem(莫比乌斯反演+欧拉降幂) 的相关文章

  • 最大公约数和最小公倍数的关系

    联系 最大公约数 指两个或多个整数共有的约数中最大的那个 最小公倍数 指两个或多个整数共有的倍数中最小的那个 以两个整数为例 最大公约数表示为 a b 最小公倍数表示为 a b 定理 a b X a b ab a b均为整数 例题 incl
  • 中国剩余定理(孙子定理)

    看了很多博客始终没弄明白中国剩余定理到底是怎么算出来的 看孙子的话完全是一脸懵逼啊 还好有这个博客大神的博客Orz 真的讲的特别清晰 点赞点赞 下面会用到的数学公式 如果a b c 那么如果x b c 2 此时x a 2 也就是说除数相等时
  • 基础算法题——Harder Gcd Problem(数论、思维)

    题目 题目链接 给定一个 n 将 2 n 内的数进行一对一匹配 每个数仅能利用一次 假设 a 与 b 匹配 则 gcd a b 1 现求 2 n 内最大匹配数量 并输出匹配数对 输入 T代表输入组数 下面T行 每一行一个数字n 输出 输出最
  • 蓝桥杯:试题 算法训练 星际交流 康托展开

    题目 资源限制 时间限制 1 0s 内存限制 256 0MB 问题描述 人类终于登上了火星的土地并且见到了神秘的火星人 人类和火星人都无法理解对方的语言 但是我们的科学家发明了一种用数字交流的方法 这种交流方法是这样 的 首先 火星人把一个
  • 数论-欧拉函数

    欧拉函数 在数论 对正整数n 欧拉函数是小于n的正整数中与n互质的数的数目 1 1 此函数以其首名研究者欧拉命名 Euler s totient function 它又称为Euler s totient function 函数 欧拉商数等
  • POJ 2689 Prime Distance(素数区间筛法--经典题)

    大致题意 给定 L R 区间 找出区间内的每个素数 数据范围 1 lt L lt R lt 2 147 483 647 R L lt 1 000 000 R的数值太大 所以不能直接筛 0 R 的 要空间和时间优化 用到区间筛法 另外注意不能
  • 【定理】算术基本定理(唯一分解定理)

    大蒟蒻来水贴了 算术基本定理 唯一分解定理 一句话 任何大于 的自然数 都可以唯一分解成有限个质数的乘积 例如对于大于1的自然数n 这里P i i均为质数 其指数a i i是正整数 这样的分解称为的标准分解式 唯一分解定理具有 唯一性 分配
  • 【CLYZ集训】马可波罗【按位】【博弈论】

    题目大意 有两个人 n n n堆石子 每个人轮流取 每次可以取1 x x x个 最后没得取的人输 两人都采取最优策略 问对于 x
  • 八数码问题【康托展开+BFS】

    Vijos 题库 八数码问题 背景 Yours和zero在研究A 启发式算法 拿到一道经典的A 问题 但是他们不会做 请你帮他们 描述 在3 3的棋盘上 摆有八个棋子 每个棋子上标有1至8的某一数字 棋盘中留有一个空格 空格用0来表示 空格
  • 【BZOJ3309】DZY Loves Math(莫比乌斯反演)

    题面 求 i 1a j 1bf gcd a b sum i 1 a sum j 1 bf gcd a b 其中 f x f x 表示 x x分解质因数之后 最高的幂次 题解 完全不会莫比乌斯反演了 先来推式子 d 1a i 1a d j 1
  • 因子【Wannafly挑战赛25 A】

    题目链接 思路 遇到N 这样的大数很显然是没办法直接去处理的 题目中告诉我们的已知是 N P k 0与 N P k 1 0 怎么处理N 是一个很复杂的事情 那我们从P开始考虑 尝试着将P拆成几个质因子的乘积形式 例如12可以拆成2 2 3的
  • 蓝桥杯真题:质数拆分

    这里 若干两两不同的质数之和 这里其实很容易想到首先我们要求出2019内的所有质数 这个打个表就好了 其次两两不同 我们应该要想到动态规划 这里设dp i j 表示前i个质数 可以两两不同加起来等于j的方案数 如果当前j gt prime
  • 符号“∑”和“Π”的用法。

    符号 和 的用法 ecnelises posted 2011年2月06日 07 33 in 计算机 with tags 公式 数学 级数 记号 6492 阅读 在数学中 符号 和 分别用来表示求和与求积 首先是函数的累积求和 n取 m k
  • P5367 【模板】康托展开【树状数组优化】

    题目链接 include
  • 【BZOJ3309】DZY Loves Math

    3309 DZY Loves Math Time Limit 20 Sec Memory Limit 512 MB Submit 411 Solved 161 Submit Status Discuss Description 对于正整数n
  • uva10105(数论多项式展开公式)

    题意 多项式 x1 x2 xk n 输入n和k 0
  • 质因数分解(唯一分解定理)

    质因数分解 题目描述 多数据 给出t个数 求出它的质因子个数 数据没坑 难度降低 输入描述 Input Description 第一行 t 之后t行 数据 输出描述 t行 分解后结果 质因子个数 样例输入 2 11 6 样例输出 1 2 数
  • 最大比例

    题目描述 解析 接下来就是求解k和p的过程 在这道题中很难使用欧几里得算法就求解最大公约数 因此尝试使用另一种方法 更相减损术 循环相减法 如果要使用欧几里得算法的话 就需要开一个非常复杂的根号 非常难算 代码 include
  • AcWing 1223. 最大比例 指数的最大公约数

    AcWing 1223 最大比例 X星球的某个大奖赛设了 M 级奖励 每个级别的奖金是一个正整数 并且 相邻的两个级别间的比例是个固定值 也就是说 所有级别的奖金数构成了一个等比数列 比如 16 24 36 54 其等比值为 3 2 现在
  • bzoj3309 DZY Loves Math

    题目链接 bzoj3309 题目大意 对于正整数n 定义f n 为n所含质因子的最大幂指数 给定正整数a b 求 ai 1 bj 1f gcd i j sum i 1 a sum j 1 b f gcd i j T lt 10000 1 l

随机推荐