bzoj 4407 于神之怒加强版——反演
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4407
\( ans = \sum\limits_{D=1}^{min(n,m)}\frac{n}{D}*\frac{m}{D}\sum\limits_{d|D}d^{k}\mu (\frac{D}{d}) \)
设 \( g[ i ]=\sum\limits_{j|i}(\frac{i}{j})^{k}*\mu (j) \) ,则 g 是积性函数(因为 id 是积性函数,所以 idk 也是;u 也是积性,卷积起来也是积性),可以筛。
g 在质因数幂地方的取值可以手动筛到一个质因数的时候赋了,遇到 i % pri[ j ] == 0 的时候就可以把 i 的 pri[ j ] 都拿出来,然后相乘得到了。
或者遇到 i % pri[ j ] == 0 的时候,发现这个 pri[ j ] 的贡献不在 \( \mu \) 里,所以只要给 g[ i ] 乘上 pri[ j ] 就行了。
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const int N=5e6+,mod=1e9+;
int T,w,g[N],s[N],pri[N];bool vis[N];
void upd(int &x){x>=mod?x-=mod:;}
int pw(int x,int k)
{int ret=;while(k){if(k&)ret=(ll)ret*x%mod;x=(ll)x*x%mod;k>>=;}return ret;}
void init()
{
int lm=5e6,cnt=;
g[]=s[]=;
for(int i=;i<=lm;i++)
{
if(!vis[i])
{
pri[++cnt]=i;
for(ll j=i,k=;j<=lm;j*=i,k*=i)
g[j]=pw(j,w)-pw(k,w)+mod,upd(g[j]),vis[j]=;
}
for(int j=;j<=cnt&&(ll)i*pri[j]<=lm;j++)
{
int d=i*pri[j]; if(vis[d])break; vis[d]=;
int k=d;while(k%pri[j]==)k/=pri[j];
g[d]=(ll)g[k]*g[d/k]%mod;
if(i%pri[j]==)break;
}
s[i]=s[i-]+g[i];upd(s[i]);
}
}
int main()
{
scanf("%d%d",&T,&w); init(); int n,m;
while(T--)
{
scanf("%d%d",&n,&m); if(n>m)swap(n,m);
int ans=;
for(int i=,j;i<=n;i=j+)
{
int d0=n/i,d1=m/i; j=min(n/d0,m/d1);
ans=(ans+(ll)d0*d1%mod*(s[j]-s[i-]+mod))%mod;
}
printf("%d\n",ans);
}
return ;
}
bzoj 4407 于神之怒加强版——反演的更多相关文章
- bzoj 4407 于神之怒加强版 —— 反演+筛积性函数
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4407 推导如这里:https://www.cnblogs.com/clrs97/p/5191 ...
- BZOJ 4407 于神之怒加强版 (莫比乌斯反演 + 分块)
4407: 于神之怒加强版 Time Limit: 80 Sec Memory Limit: 512 MBSubmit: 1067 Solved: 494[Submit][Status][Disc ...
- bzoj 4407 于神之怒加强版 (反演+线性筛)
于神之怒加强版 Time Limit: 80 Sec Memory Limit: 512 MBSubmit: 1184 Solved: 535[Submit][Status][Discuss] D ...
- ●BZOJ 4407 于神之怒加强版
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4407 题解: 莫比乌斯反演 直接套路化式子 $\begin{align*}ANS&= ...
- bzoj 4407: 于神之怒加强版【莫比乌斯反演+线性筛】
看着就像反演,所以先推式子(默认n<m): \[ \sum_{d=1}^{n}d^k\sum_{i=1}^n\sum_{j=1}^m[gcd(i,j)==d] \] \[ =\sum_{d=1} ...
- BZOJ 4407: 于神之怒加强版 [莫比乌斯反演 线性筛]
题意:提前给出\(k\),求\(\sum\limits_{i=1}^n \sum\limits_{j=1}^m gcd(i,j)^k\) 套路推♂倒 \[ \sum_{D=1}^n \sum_{d|D ...
- BZOJ.4407.于神之怒加强版(莫比乌斯反演)
题目链接 Description 求\[\sum_{i=1}^n\sum_{j=1}^m\gcd(i,j)^K\ \mod\ 10^9+7\] Solution 前面部分依旧套路. \[\begin{ ...
- BZOJ 4407: 于神之怒加强版 莫比乌斯反演 + 线筛积性函数
Description 给下N,M,K.求 Input 输入有多组数据,输入数据的第一行两个正整数T,K,代表有T组数据,K的意义如上所示,下面第二行到第T+1行,每行为两个正整数N,M,其意 ...
- BZOJ 4407 于神之怒加强版
http://www.lydsy.com/JudgeOnline/problem.php?id=4407 题意: 给下N,M,K.求 思路: 来自:http://blog.csdn.net/ws_y ...
随机推荐
- 【前端安全】 web前端安全编码(模版篇)【转】
在web的开发的开发过程中,前端总是在处理后端打的各种变量,变量可以包含着中的各种各样的字符,如果不对这些字符进行”特殊“处理的话,轻者导 致页面不正常的显示,潜入了其他的东西,亦即页面挂了,或者弹出 ...
- php获取当前日期开始一周日期与星期几
不说了,对于PHPer来说,写不出来说什么都是白瞎,不喜勿喷~~~~ function get_week(){ $data = []; $format='Y-m-d'; for ($i=0; $i&l ...
- Windows平台编程涉及的函数
VirtualAlloc 调用进程的虚拟地址空间 GetTickCount 返回从操作系统启动到当前所经历过的毫秒数 malloc.h内存分配函数,需要头文件malloc.h
- Week09《java程序设计》第九次作业总结
Week09<java程序设计>第九次作业总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 答: 2. 书面作业 本次作业题集集合 1. Li ...
- 201621123005《Java程序设计》第二周学习总结
201621123005<JAVA程序设计>第二周学习总结 1. 本周学习总结 本章学习了String 的不可变性.自动装箱和拆箱过程,并熟悉了动态数组等 Java中的应用,还有Array ...
- Python面向对象的三大特征 --- 封装、继承、多态
一.封装 1)封装:是面向对象的一大特点:将属性和方法封装在一个抽象类中.外界使用类创建对象,然后让对象调用内部方法.对象方法的细节都被封装在类的内部. class Person(): def _ ...
- 如何将dom4j的jar包放到java项目中
---恢复内容开始--- 如果你建的是java project项目的话,那就通过Myeclispe中的右键你的项目名称,选择build path ->config build path... 然 ...
- 《Drools7.0.0.Final规则引擎教程》第4章 4.9 关键字
关键字 从Drools 5开始引入了硬关键字和软关键字.硬关键字是保留关键字,在命名demo对象,属性,方法,函数和规则文本中使用的其他元素时,不能使用任何硬关键字.以下是必须避免的硬关键字: (1) ...
- Linux文件权限总结
一.用户组和用户 Linux是一个多用户.多任务环境,如下图,GroupA代表一个用户组,GroupB代表一个用户组,root是超级用户. Linux中,任何一个文件都有User.Group和othe ...
- sql基础语法复习(二)-- 分组,连接的使用
一.深入学习 group by group by ,分组,顾名思义,把数据按什么来分组,每一组都有什么特点. 1.我们先从最简单的开始: select count(*) from tb1 group ...