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(莫比乌斯反演+欧拉降幂) 的相关文章

  • 中国剩余定理(孙子定理)

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

    位运算之谜 题目链接 数论 a b a xor b 2 a b 变式可得 a xor b a b 2 a b 另外还要排除两种不能被组成的情况 a b 2 a b lt 0 a xor b最小为0 不存在小于0的值 a b a b 2 a
  • 基础算法题——Harder Gcd Problem(数论、思维)

    题目 题目链接 给定一个 n 将 2 n 内的数进行一对一匹配 每个数仅能利用一次 假设 a 与 b 匹配 则 gcd a b 1 现求 2 n 内最大匹配数量 并输出匹配数对 输入 T代表输入组数 下面T行 每一行一个数字n 输出 输出最
  • 【学习笔记】大指数的两种处理方法——欧拉降幂和数学模拟

    问题背景 描述 题目范围 我们可以看到 y 的数位最长达1e5 1 远远超过了任何一个数据类型的范围 那我们如何计算像这样的大指数呢 有两种解决方法 我们先学习第一种 算法 欧拉降幂 对于算法欧拉降幂 你需要知道的东西有 1 欧拉函数 2
  • 牛客周赛 Round 4---游游的因子计算

    输入 6 2 输出 6 1 2 3 4 6 12 解析 如果一个数 x 是 a 的因子 y是b的因子 那么x y一定是a b的因子 试除法分别获取a和b的因子 然后两层遍历的所有 a i b j 的所有情况即为答案 include
  • H . 真签到题

    题目链接 题目描述 Fibonacci 数列 f n f n 1 f n 2 前n项为1 1 2 3 5 8 给出n m 需要你计算出满足条件的对数 i j 的个数 且i lt j 条件是 1 lt gcd f i f j lt n i j
  • 八数码问题【康托展开+BFS】

    Vijos 题库 八数码问题 背景 Yours和zero在研究A 启发式算法 拿到一道经典的A 问题 但是他们不会做 请你帮他们 描述 在3 3的棋盘上 摆有八个棋子 每个棋子上标有1至8的某一数字 棋盘中留有一个空格 空格用0来表示 空格
  • 扩展欧几里得算法

    扩展欧几里得算法是啥 那就要先知道什么是欧几里得算法 欧几里得算法 扩展欧几里得算法是欧几里得算法的推广 利用欧几里得算法的思想和递归求得贝祖等式a x b y gcd a b 不定方程中的一组x和y的解 原理如下 设a gt b 当b 0
  • 【BZOJ 2219】【超详细题解】数论之神

    2219 数论之神 Time Limit 3 Sec Memory Limit 259 MB Submit 365 Solved 33 Submit Status Discuss Description 在ACM DIY群中 有一位叫做 傻
  • 蓝桥杯真题:质数拆分

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

    符号 和 的用法 ecnelises posted 2011年2月06日 07 33 in 计算机 with tags 公式 数学 级数 记号 6492 阅读 在数学中 符号 和 分别用来表示求和与求积 首先是函数的累积求和 n取 m k
  • REQ 【CodeForces - 594D】【树状数组+离线查询+区间思维】

    题目链接 很好的一道题 昨晚上推的 今天由于代码能力太弱敲了半天 再不断的找到自己思维的BUG 于是RE了一发 T了一发 WA了一发 就Ac了 还不错 那我们来讲解一下题目的思路 我们知道对于一个值的欧拉函数值 就是它的值去乘上它所有的质数
  • uva10105(数论多项式展开公式)

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

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

    主要是使用到了二分的思想 知道字符串就是知道了它的长度 然后可知len max s length 2 然后暴力枚举就可以得出答案 代码如下 include
  • Relatives 【POJ - 2407】【欧拉筛、预处理】

    Given n a positive integer how many positive integers less than n are relatively prime to n Two integers a and b are rel
  • 唯一分解定理(分解质因子)

    唯一分解定理 每个大于一的自然数均可写为质数的积 而且这些素因子按大小排列之后 写法只有一种方式 最简单的写法 include
  • 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
  • 【数论基础】—— 二项式定理

    二项式定理 内容 x y n
  • Toyota Programming Contest 2023#8(AtCoder Beginner Contest 333)G. Nearest Fraction(有理实数求分母不超过n的最优逼近)

    题目 给一个不超过1的实数r r最多18位小数 和一个分母n n lt 1e10 求分母不超过n的与该有理实数的最优逼近 即二者绝对值之差最小 有理实数显然可以转成分数 思路来源 官方题解 farey序列论文 一类分数问题的研究 pdf 题

随机推荐