博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【JZOJ4161】于神之怒 莫比乌斯反演
阅读量:4495 次
发布时间:2019-06-08

本文共 1054 字,大约阅读时间需要 3 分钟。

任务

这里写图片描述

这里写图片描述
答案mod 1e9+7.

解法

容易写出反演:

Ans=T=1nTki=1nTniTmiTμ(i)
nTi=1niTmiTμ(i)这个因式显然是经典的
分块处理
同时我们还发现,
T满足
nT
mT相等时,这个因式是相等的。
所以我们还可以对
T进行
分块
总的时间复杂度就是
O(n)

另外的Trick:

当我们在对T进行分块之前,
我们还需预处理出Tk的前缀和。
由于逐个预处理Tk会超时,所以可以考虑利用线性筛法预处理Tk

代码

#include
#include
#include
#include
#include
#define ll long longusing namespace std;const char* fin="ex4161.in";const char* fout="ex4161.out";const ll inf=0x7fffffff;const ll maxn=5000007,mo=1e9+7;ll n,m,N,i,j,k,ans,t;ll mu[maxn],p[maxn],s[maxn];bool bz[maxn];ll qpower(ll a,ll b){ ll c=1; while (b){ if (b&1) c=c*a%mo; a=a*a%mo; b>>=1; } return c;}int main(){ scanf("%d%d%d",&n,&m,&N); if (n>m) swap(n,m); mu[1]=1; s[1]=1; for (i=2;i
=maxn) break; bz[k]=true; s[k]=s[i]*s[p[j]]%mo; if (i%p[j]==0){ mu[k]=0; break; }else mu[k]=-mu[i]; } } for (i=1;i

Warning

注意卡常,先预算出nTmT,可大幅降低常数。

转载于:https://www.cnblogs.com/hiweibolu/p/6714778.html

你可能感兴趣的文章
python 解析Excel
查看>>
$_SERVER
查看>>
Lambda表达式-使用说明
查看>>
【第一篇:C++与opencv】图片的读取和显示
查看>>
PV inverter启动 ----系列一
查看>>
Windows 8在Vmware 8 中安装提示:windows cannot read the<product key> setting from the unattend answer...
查看>>
牛客训练六:海啸(二维树状数组+vector函数的使用)
查看>>
css重要属性float学习
查看>>
今天 了解了一下 但是看不到解析xml的底层代码 也没什么东西
查看>>
连接运算符
查看>>
二级LOGO设计代表什么
查看>>
清除sql server2000/2005/2008数据库日志的方法
查看>>
1-3 并发与高并发基本概念.mkv
查看>>
R 连接DB2数据库,并制作词图
查看>>
Struts 2基础知识
查看>>
SQL语法
查看>>
适配器模式(默认适配器)
查看>>
Nginx 配置简述
查看>>
NPOI 导入excel
查看>>
字符测试与映射函数 ctype.h
查看>>