Description

Sol

这题好难啊QAQ

反正不看题解我对自然数幂求和那里是一点思路都没有qwq

先推出一个可做一点的式子:

\(f(n)=\sum_{k=1}^{n}[(n,k)=1]k^d\)

\(=\sum_{k=1}^{n}k^d\sum_{e|n,e|k}\mu(e)\)

\(=\sum_{e|n}\sum_{k=1}^{n/e}(ek)^d\mu(e)\)

\(=\sum_{e|n}e^d\mu(e)\sum_{k=1}^{n/e}k^d\)

我们假装(反正就是可以但是我太弱了不会证)后面的式子是一个d+1次的关于n的多项式,因为d很小所以我们用高斯消元求出来系数ai,之后得到:

原式

\(=\sum_{e|n}e^d\mu(e)\sum_{k=1}^{d+1}a_k(n/e)^k\)

\(=\sum_{k=1}^{d+1}a_k\sum_{e|n}e^d\mu(e)(n/e)^k\)

设\(fk(n)=\sum_{e|n}e^d\mu(e)(n/e)^k\)

因为\(e^d\mu(e)\)与\((n/e)^i\)都是积性函数,所以他们的狄利克雷卷积\(fk(n)\)也是积性函数

我们对于n分解质因数,对于每种质数的qi次幂单独计算,然后乘起来。

显然这样答案等于

\(1^d*\mu(1)*pi^{qi^{k}}+pi^d*\mu(pi)*p^{(qi-1)^{k}}\)

题目都帮你分解好了就是一种暗示qwq

看到乘数里面有莫比乌斯函数,就要往次幂上想,然后只保留零次幂和一次幂(逃

这个可以直接暴力,ai还是已知的,那么直接枚举d即可。

Code

#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll ans,v[105][105],pa[1005],pb[1005],P=1e9+7;int n,d;
ll ksm(ll a,ll b){ll res=1;for(;b;b>>=1,a=a*a%P) if(b&1) res=res*a%P;return res;}
void gauss(int n)
{
for(int i=1,k,t;i<=n;i++)
{
for(int j=i;j<=n;j++) if(v[j][i]) for(k=i;k<=n+1;k++) swap(v[j][k],v[i][k]);
for(int j=i+1;j<=n;j++) if(i!=j) for(t=1ll*v[j][i]*ksm(v[i][i],P-2)%P,k=i;k<=n+1;k++) v[j][k]=(v[j][k]-1ll*t*v[i][k]%P+P)%P;
}
for(int i=n;i;i--)
{
for(int j=n;j>i;j--) v[i][n+1]=(v[i][n+1]-1ll*v[i][j]*v[j][n+1]%P+P)%P;
v[i][n+1]=1ll*v[i][n+1]*ksm(v[i][i],P-2)%P;
}
}
int main()
{
scanf("%d%d",&d,&n);
for(int i=1;i<=d+1;i++)
{
for(int j=1;j<=d+1;j++) v[i][j]=ksm(i,j);
for(int j=1;j<=i;j++) v[i][d+2]=(v[i][d+2]+ksm(j,d))%P;
}
gauss(d+1);
for(int i=1;i<=n;i++) scanf("%lld%lld",&pa[i],&pb[i]);
for(int i=1,tmp=1;i<=d+1;i++,tmp=1)
{
for(int j=1;j<=n;j++) tmp=1ll*tmp*(ksm(pa[j],pb[j]*i)-ksm(pa[j],d+(pb[j]-1)*i)%P+P)%P;
ans=(ans+1ll*tmp*v[i][d+2]%P)%P;
}
printf("%lld\n",ans);
}

【bzoj3601】一个人的数论 莫比乌斯反演+莫比乌斯函数性质+高斯消元的更多相关文章

  1. 【bzoj3601】一个人的数论 莫比乌斯反演+高斯消元

    题目描述 题解 莫比乌斯反演+高斯消元 (前方高能:所有题目中给出的幂次d,公式里为了防止混淆,均使用了k代替) #include <cstdio> #include <cstrin ...

  2. 【BZOJ3601】一个人的数论 高斯消元+莫比乌斯反演

    [BZOJ3601]一个人的数论 题解:本题的做法还是很神的~ 那么g(n)如何求呢?显然它的常数项=0,我们可以用待定系数法,将n=1...d+1的情况代入式子中解方程,有d+1个方程和d+1个未知 ...

  3. [bzoj3601] 一个人的数论 [莫比乌斯反演+高斯消元]

    题面 传送门 思路 这题妙啊 先把式子摆出来 $f_n(d)=\sum_{i=1}^n[gcd(i,n)==1]i^d$ 这个$gcd$看着碍眼,我们把它反演掉 $f_n(d)=\sum_{i=1}^ ...

  4. BZOJ3601 一个人的数论 【数论 + 高斯消元】

    题目链接 BZOJ3601 题解 挺神的 首先有 \[ \begin{aligned} f(n) &= \sum\limits_{x = 1}^{n} x^{d} [(x,n) = 1] \\ ...

  5. LOJ 2542 「PKUWC2018」随机游走 ——树上高斯消元(期望DP)+最值反演+fmt

    题目:https://loj.ac/problem/2542 可以最值反演.注意 min 不是独立地算从根走到每个点的最小值,在点集里取 min ,而是整体来看,“从根开始走到点集中的任意一个点就停下 ...

  6. BZOJ3601 一个人的数论 莫比乌斯反演、高斯消元/拉格朗日插值

    传送门 题面图片真是大到离谱-- 题目要求的是 \(\begin{align*}\sum\limits_{i=1}^N i^d[gcd(i,n) == 1] &= \sum\limits_{i ...

  7. BZOJ 3601 一个人的数论 ——莫比乌斯反演 高斯消元

    http://www.cnblogs.com/jianglangcaijin/p/4033399.html ——lych_cys 我还是太菜了,考虑一个函数的值得时候,首先考虑是否积性函数,不行的话就 ...

  8. 【bzoj4804】欧拉心算 莫比乌斯反演+莫比乌斯函数性质+线性筛

    Description 给出一个数字N 求\(\sum_{i=1}^{n}\sum_{j=1}^{n}\varphi(gcd(i,j))\) Input 第一行为一个正整数T,表示数据组数. 接下来T ...

  9. BZOJ3601. 一个人的数论(狄利克雷卷积+高斯消元)及关于「前 $n$ 个正整数的 $k$ 次幂之和是关于 $n$ 的 $k+1$ 次多项式」的证明

    题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=3601 题解 首先还是基本的推式子: \[\begin{aligned}f_d(n) &a ...

随机推荐

  1. keil:C语言里面调用汇编程序

    C语言直观,汇编效率高,C里面嵌入汇编是很好的选择. 路径大概如图: mian.c是我的C语言程序,Func.s是汇编程序. 主要是Init_1这个函数的实现在汇编文件里面,使用汇编实现的. 首先在C ...

  2. js中slice,splice和split方法的区别

    1.slice(数组) 用法:array.slice(start,end) 解释:该方法是对数组进行部分截取,并返回一个数组副本:参数start是截取的开始数组索引,end参数等于你要取的最后一个字符 ...

  3. BurpSuite—-decoder模块(编码模块)

    一.简介 Burp Decoder是Burp Suite中一款编码解码工具,将原始数据转换成各种编码和哈希表的简单工具,它能够智能地识别多种编码格式采用启发式技术. 二.模块说明 通过有请求的任意模块 ...

  4. Spring Cloud Eureka 4 (高可用服务注册中心)

    在微服务这样的分布式环境中,我们需要充分考虑发生故障的情况,所以在生产环境中必须考虑对各个组件进行高可用部署,对于服务注册中心也是一样. Eureka Server 的高可用实际上就是讲自己作为服务向 ...

  5. java通过反射了解集合泛型的本质

  6. Python文件修改和常用方法

    为了更好地说明接下来的文件修改操作,我们有必要先来学习下文件操作的常用方法. 一.文件处理中的常用方法 #!/usr/bin/env python3 #-*- coding:utf-8 -*- # w ...

  7. ParallaxEffect

    [ParallaxEffect] ParallaxEffect是一种用简单的2D贴图来模拟3D效果的简易方法.譬如一棵树,摄像机俯视时,当树远离摄像机时,树顶偏远,当树靠近,树顶偏近.苹果官方Adve ...

  8. Hadoop之HDFS(三)HDFS的JAVA API操作

    HDFS的JAVA API操作 HDFS 在生产应用中主要是客户端的开发,其核心步骤是从 HDFS 提供的 api中构造一个 HDFS 的访问客户端对象,然后通过该客户端对象操作(增删改查)HDFS ...

  9. python拷贝文件小程序(windows)

    #!/usr/bin/python import os source='F:\\lh.jpg' target='E:\\' copy_command="xcopy %s %s"%( ...

  10. jquery 获取url 参数方法 以及 解决url中文问题

    //jQuery 动态给a 标签赋值 跳转 新的页面打开. /* <a class="btn btn-success" id="test" target= ...