于神之怒加强版

2024-03-16 23:38
文章标签 加强版 神之怒

本文主要是介绍于神之怒加强版,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

于神之怒加强版

题解

很明显的一道莫比乌斯反演。

原式:\sum_{i=1}^{n}\sum_{j=1}^{m}(i,j)^k

= \sum_{i=1}^{n}\sum_{j=1}^{m}\sum_{d=1}^{n}d^k[(i,j)==1]

= \sum_{d=1}^{n}d^k\sum_{j=1}^{\lfloor \frac{n}{d} \rfloor}\sum_{j=1}^{\lfloor \frac{m}{d} \rfloor}\sum_{x|i,x|j}\mu\left(x \right )

= \sum_{d=1}^{n}d^k\sum_{x=1}^{\frac{n}{d}}\mu\left(x \right )\lfloor \frac{n}{dx} \rfloor ^2

T= dx,原式:

=\sum_{T=1}^{n}\lfloor \frac{n}{T} \rfloor \lfloor \frac{m}{T} \rfloor \sum_{d|T}d^k \mu\left( \frac{T}{d} \right )

g\left(T \right )= \sum_{d|T}a^k\mu\left(\frac{T}{d} \right )

反演可得g\left(T \right )=\prod _{i=1}^{t}g\left(P_{i}^{x_{i}} \right )

=\prod _{i=1}^{t}P_{i}^{k(x_{i}-1)}\mu\left(P_{i} \right )+P_{i}^{kx_{i}}\mu\left( 1 \right )

= \prod_{i=1}^{t}P_{i}^{k(x_{i}-1)(P_{i}^{k}-1)}

于是就可以快乐的分块了

源码

#include<cstdio>
#include<cmath>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<queue>
#include<vector>
using namespace std;
#define MAXN 5000010
typedef long long LL;
#define int LL
const int INF=0x7f7f7f7f;
const int mo=1e9+7;
typedef pair<int,int> pii;
#define gc() getchar()
template<typename _T>
void read(_T &x){_T f=1;x=0;char s=gc();while(s>'9'||s<'0'){if(s=='-')f=-1;s=gc();}while(s>='0'&&s<='9'){x=(x<<3)+(x<<1)+(s^48);s=gc();}x*=f;
}
int tt,k,n,m,T;
int cntp,prime[MAXN],mobius[MAXN],g[MAXN];
bool oula[MAXN];
int mlt(int a,int b){int res=1;while(b){if(b&1)res=res*a%mo;b>>=1;a=a*a%mo;}return res;
}
void init(){mobius[1]=1;for(int i=2;i<=5e6;i++){if(!oula[i]){prime[++cntp]=i;g[cntp]=mlt(i,k);mobius[i]=(g[cntp]-1+mo)%mo;}for(int j=1;j<=cntp&&i*prime[j]<=5e6;j++){oula[i*prime[j]]=1;if(i%prime[j]==0){mobius[i*prime[j]]=mobius[i]*g[j]%mo;break;}mobius[i*prime[j]]=mobius[i]*mobius[prime[j]]%mo;}}for(int i=1;i<=5e6;i++)mobius[i]=(mobius[i-1]+mobius[i])%mo;
}
signed main(){read(tt);read(k);init();while(tt--){read(n);read(m);T=min(n,m);int pos,ans=0;for(int i=1;i<=T;i=pos+1){pos=min(n/(n/i),m/(m/i));ans=(ans+(mobius[pos]-mobius[i-1]+mo)*(n/i)%mo*(m/i)%mo)%mo;}printf("%lld\n",ans);}return 0;
}

谢谢!!!

这篇关于于神之怒加强版的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/817116

相关文章

18041 分期还款(加强版)

### 自查思路 1. 检查输入数据的处理是否正确。 2. 检查判断条件 `p <= d * r` 是否正确。 3. 确认公式计算和输出格式是否正确。 ### 伪代码 1. 读取输入的贷款金额、每月还款额和月利率。 2. 判断是否可以还清贷款:    - 如果每月还款额小于贷款金额乘以月利率,则输出“God”。    - 否则,计算还清贷款所需的月份数:      - 使用公式 m = lo

IOI2000 邮局 加强版 题解

[IOI2000] 邮局 加强版 题解 考虑动态规划,设 f i , j f_{i,j} fi,j​ 为经过了 i i i 个村庄,正在建第 j j j​ 个邮局的最优距离。 以及 w i , j w_{i,j} wi,j​ 表示区间 [ i , j ] [i,j] [i,j]​ 内建一个邮局时的距离总和。 a a a 数组表示每个村庄的坐标编号。 朴素版状态转移方程: f

Android面试题总结加强版(二)

http://blog.csdn.net/superjunjin/article/details/7855995 16.Android常用控件的信息 单选框(RadioButton与RadioGroup): RadioGroup用于对单选框进行分组,相同组内的单选框只有一个单选框被选中。 事件:setOnCheckedChangeListener(),处理单选框被选择

Android之面试题总结加强版(一)

转载:http://blog.csdn.net/itachi85/article/details/7426451 自己总结的最强android应用面试题集 1.activity的生命周期。 方法 描述 可被杀死 下一个 onCreate() 在activity第一次被创建的时候调用。这里是你做所有初始化设置的地方──创建视图、绑定数据至列表等。如果曾经有状态记

AC自动机加强版 uva 1449 - Dominating Patterns

AC自动机最初作用  一个常见的例子就是给出n个单词,再给出一段包含m个字符的文章,让你找出有多少个单词在文章里出现过。 当然这不是AC自动机的全部作用。 本文就是一例,给出几个单词,查询在text里出现最多次数的单词,如果不唯一,按输入次序输出 AC自动机是刚刚学的,修改其实自己没能力,参考了别人的代码,修改了自己的模板 先看题目http://uva.onlinejudge.org/in

poj 3783 DP 2个鸡蛋扔100层楼的加强版

http://poj.org/problem?id=3783 估计23号之后的排位赛之后我就要退役了,这之前最后再做5天ACM 今天的排位很惨,上次排位也很惨......这道题原来算法课老师讲过,模模糊糊记得方程,但是边界处理有问题, dp[i][j]=min(1+max(dp[k-1][j-1],dp[i-k][j]))   k=1 to 楼数 dp[i][j]:i层楼扔,手里有j个bal

【微信小程序调用百度API实现图像识别实战】-前后端加强版

前言:基于前面两篇图像识别项目实战文章进行了改造升级。 第一篇 入门【微信小程序调用百度API实现图像识别功能】----项目实战 第二篇 前后端结合 【微信小程序调用百度API实现图像识别实战】----前后端分离 这一篇主要讲述的是在第二篇的基础上新增意见反馈功能,并将识别结果中名称和置信度及意见和联系方式保存到数据库中。 目录  一.意见反馈功能  1.1前端页面  1.1.1 W

Maven仓库管理-Nexus(转帖后加强版)

前面我讲到为什么要使用Maven, Maven的安装,以及如何与IDE集成等,前面的介绍可以认为是一个Hello World,教你如何利用Maven来进行项目开发,如何结合IDE实现一键式DEBUG,从现在开始我们开始深入探讨Maven的一些高级内容。   这一个章节,我分两部分来介绍,首先介绍一下Maven的仓库,然后在说一下如何通过Nexus来建立我们自己的仓库,以及如何使用。

HYSBZ 3674: 可持久化并查集加强版——主席树+并查集

Description: 自从zkysb出了可持久化并查集后…… hzwer:乱写能AC,暴力踩标程 KuribohG:我不路径压缩就过了! ndsf:暴力就可以轻松虐! zky:…… n个集合 m个操作 操作: 1 a b 合并a,b所在集合 2 k 回到第k次操作之后的状态(查询算作操作) 3 a b 询问a,b是否属于同一集合,是则输出1否则输出0 请注意本题采用强制在

李白打酒加强版(c++实现)

题目 话说大诗人李白,一生好饮。 幸好他从不开车。 一天,他提着酒壶,从家里出来,酒壶中有酒 2 斗。 他边走边唱: 无事街上走,提壶去打酒。 逢店加一倍,遇花喝一斗。 这一路上,他一共遇到店 N 次,遇到花 M 次。 已知最后一次遇到的是花,他正好把酒喝光了。 请你计算李白这一路遇到店和花的顺序,有多少种不同的可能? 注意:壶里没酒 (0 斗) 时遇店是合法的,加倍后还是