传送门


题面图片真是大到离谱……

题目要求的是

\(\begin{align*}\sum\limits_{i=1}^N i^d[gcd(i,n) == 1] &= \sum\limits_{i=1}^N i^d \sum\limits_{p \mid gcd(i,n)} \mu(p) \\ &= \sum\limits_{p|n} \mu(p) p^d \sum\limits_{i=1}^{\frac{n}{p}} i^d\end{align*}\)

然后就不会做了qwq,后面的自然数次幂和似乎和前面的\(\mu(p)p^d\)没什么关系

注意到\(f(x) = \sum\limits_{i=1}^x i^d\)可以写成一个\(d+1\)次多项式,即\(f(x) = \sum\limits_{i=0}^{d+1} a_ix^i\),将这个代入上面的式子

\(\begin{align*}\sum\limits_{p|n} \mu(p) p^d \sum\limits_{i=1}^{\frac{n}{p}} i^d &= \sum\limits_{p|n} \mu(p) p^d \sum\limits_{i=0}^{d+1} a_i(\frac{n}{p})^i \\ &= \sum\limits_{i=0}^{d+1} a_i n^i \sum\limits_{p \mid n} \mu(p)p^{d-i} \end{align*}\)

\(\mu(p)p^{d-i}\)是积性函数,\(\mu(p)\)又需要保证\(p\)中每一个质因数的指数只能为\(1\),给出\(n\)的方式又是质因数分解之后的方式,所以可以比较方便地计算所有质数的贡献。

所以唯一的问题就是如何求出\(a_i\)。这个高斯消元和拉格朗日插值都可以。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
//This code is written by Itst
using namespace std; const int MAXN = 1007 , MOD = 1e9 + 7;
int N , D , W , prm[MAXN] , e[MAXN] , gauss[107][107]; inline int poww(long long a , int b){
int times = 1;
if(b < 0) b += MOD - 1;
while(b){
if(b & 1) times = times * a % MOD;
a = a * a % MOD;
b >>= 1;
}
return times;
} void init(){
int sum = 0;
for(int i = 0 ; i <= D + 1 ; ++i){
int cur = 1;
sum = (sum + poww(i , D)) % MOD;
for(int j = 0 ; j <= D + 1 ; ++j){
gauss[i][j] = cur;
cur = 1ll * cur * i % MOD;
}
gauss[i][D + 2] = sum;
}
for(int i = 0 ; i <= D + 1 ; ++i){
int j = i;
while(j <= D + 1 && !gauss[j][i])
++j;
swap(gauss[i] , gauss[j]);
int inv = poww(gauss[i][i] , MOD - 2);
for(int k = i ; k <= D + 2 ; ++k)
gauss[i][k] = 1ll * gauss[i][k] * inv % MOD;
while(++j <= D + 1)
if(gauss[j][i])
for(int k = D + 2 ; k >= i ; --k)
gauss[j][k] = (gauss[j][k] - 1ll * gauss[i][k] * gauss[j][i] % MOD + MOD) % MOD;
}
for(int i = D + 1 ; i >= 0 ; --i)
for(int j = i - 1 ; j >= 0 ; --j)
gauss[j][D + 2] = (gauss[j][D + 2] - 1ll * gauss[j][i] * gauss[i][D + 2] % MOD + MOD) % MOD;
} int main(){
#ifndef ONLINE_JUDGE
//freopen("in","r",stdin);
//freopen("out","w",stdout);
#endif
cin >> D >> W;
N = 1;
for(int i = 1 ; i <= W ; ++i){
cin >> prm[i] >> e[i];
N = 1ll * N * poww(prm[i] , e[i]) % MOD;
}
init();
int ans = 0;
for(int i = 0 ; i <= D + 1 ; ++i){
int sum = 1;
for(int j = 1 ; j <= W ; ++j)
sum = 1ll * sum * (1 - poww(prm[j] , D - i) + MOD) % MOD;
ans = (ans + 1ll * sum * poww(N , i) % MOD * gauss[i][D + 2]) % MOD;
}
cout << ans;
return 0;
}

BZOJ3601 一个人的数论 莫比乌斯反演、高斯消元/拉格朗日插值的更多相关文章

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

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

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

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

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

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

  4. 【XSY3309】Dreamweaver 高斯消元 拉格朗日插值

    题目大意 这是一道通信题. 给你 \(8\) 个 \(32\) 位整数.加密端要把这些数加密成至少 \(1000\) 个 \(32\) 位整数,交互库会把这些整数随机打乱后发给解密端,解密端最多能获得 ...

  5. EOJ Monthly 2019.11 E. 数学题(莫比乌斯反演+杜教筛+拉格朗日插值)

    传送门 题意: 统计\(k\)元组个数\((a_1,a_2,\cdots,a_n),1\leq a_i\leq n\)使得\(gcd(a_1,a_2,\cdots,a_k,n)=1\). 定义\(f( ...

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

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

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

    Description Sol 这题好难啊QAQ 反正不看题解我对自然数幂求和那里是一点思路都没有qwq 先推出一个可做一点的式子: \(f(n)=\sum_{k=1}^{n}[(n,k)=1]k^d ...

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

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

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

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

随机推荐

  1. Future FutrueTask Callable类源码说明以及原理使用

    1.Future Callable FutureTask 源码说明 JDK内置的Future主要使用到了Callable接口和FutureTask类. Callable是类似于Runnable的接口, ...

  2. Javascript 流程控制

    流程控制 JavaScript通过流程语句来执行程序流,程序流有若干语句组成.在正常情况下,程序中 的语句时按照书写顺序执行的,这种结构称为顺序结构.除了顺序结构之外还有选择结构和循环结构. 1.选择 ...

  3. 「破解」Xposed强

    「破解」Xposed强 Hook Hook Hook! 两张图片,第一张是我的微信截图,第二张是我从微信Hook出的一些类名. 一段代码,Hook这些类名出来的源码. 知道这些我们能干嘛,当然是分析( ...

  4. LeetCode题解之 Assign Cookies

    1.题目描述 2.问题分析 使用贪心算法. 3 代码 class Solution { public: int findContentChildren(vector<int>& g ...

  5. 华为ENSP进行evn实验,尚不完整,但已经有RT1、RT2、RT3、RT4了

    组网R1 -- CE12800  -- CE12800 --- R2 其中R1.R2是模拟VM的 R1的配置: interface GigabitEthernet0/0/0#interface Gig ...

  6. SQL SERVER中LIKE使用变量类型不同输出结果不一致解惑

    一同事在写脚本时,遇到一个关于LIKE里面使用不同的变量类型导致查询结果不一致的问题,因为这个问题被不同的人问过好几次,索性总结一下,免得每次都要解释一遍,直接丢一篇博客岂不是更方便!其实看似有点让人 ...

  7. 洗礼灵魂,修炼python(89)-- 知识拾遗篇 —— 进程

    进程 1.含义:计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位.说白了就是一个程序的执行实例. 执行一个程序就是一个进程,比如你打开浏览器看到我的博客,浏览器本身是一 ...

  8. Postgresql的隐藏系统列

    转自 https://www.2cto.com/database/201206/137301.html   Postgresql的隐藏系统列   和oracle数据库一样,postgresql也有自身 ...

  9. AngularJS学习之旅—AngularJS 简介(一)

    一.AngularJS 简介 1.AngularJS 是一个 JavaScript 框架. AngularJS 是一个 JavaScript 框架.它是一个以 JavaScript 编写的库.Angu ...

  10. timeout 命令

    命令简介 运行指定的命令,如果在指定时间后仍在运行,则杀死该进程.用来控制程序运行的时间. 使用方法 1 2 3 timeout [选项] 数字[后缀] 命令 [参数]... 后缀 s 代表秒(默认值 ...