博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Sdoi2017]数字表格 [莫比乌斯反演]
阅读量:6759 次
发布时间:2019-06-26

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

题意:求

\[ \prod_{i=1}^n \prod_{j=1}^m f[(i,j)] \]


考场60分

其实多推一步就推倒了...

因为是乘,我们可以放到

\[ \prod_{d=1}^n \prod_{i=1}^{\frac{n}{d}}\prod_{i=1}^{\frac{m}{d}} f[d]^{[(i,j)=1]} \]
套路一直推完
\[ \prod_{D=1}^n \prod_{d|D} f[d]^{\mu(\frac{D}{d}) \cdot \frac{n}{D} \cdot \frac{m}{D}} \]
用枚举倍数的方法预处理
\[ \prod_{d|D} f[d]^{\mu(\frac{D}{d})} \]
的前缀积就行了

#include 
#include
#include
#include
#include
using namespace std;const int N=1e6+5, mo=1e9+7;typedef long long ll;inline int read() { char c=getchar(); int x=0, f=1; while(c<'0' || c>'9') {if(c=='-')f=-1; c=getchar();} while(c>='0' && c<='9') {x=x*10+c-'0'; c=getchar();} return x*f;}int Q, n, m, f[N]; ll g[N];inline ll Pow(ll a, int b) { ll ans=1; for(; b; b>>=1, a=a*a%mo) if(b&1) ans=ans*a%mo; return ans;}int p[N], notp[N]; ll mu[N];inline void mod(int &x) {if(x>=mo) x-=mo;}inline void mod(ll &x) {if(x>=mo) x-=mo;}void sieve(int n) { mu[1]=1; for(int i=2; i<=n; i++) { //printf("i %d\n",i); if(!notp[i]) p[++p[0]]=i, mu[i]=-1; for(int j=1; j<=p[0] && i*p[j]<=n; j++) { //printf("j %d\n",p[j]); notp[ i*p[j] ]=1; if(i % p[j] == 0) { mu[ i*p[j] ]=0; break; } mu[ i*p[j] ] = -mu[i]; } } f[0]=0; f[1]=1; g[1]=1; g[0]=1; for(int i=2; i<=n; i++) mod(f[i] += f[i-1] + f[i-2]), g[i] = 1; for(int i=1; i<=n; i++) { ll inv = Pow(f[i], mo-2); for(int j=i, k=1; j<=n; j+=i, k++) if(mu[k]) ( g[j] *= (mu[k]==1 ? f[i] : inv) ) %= mo; (g[i] *= g[i-1]) %= mo; } //for(int i=1; i<=10; i++) printf("fg %d %d %lld\n", i, f[i], g[i]);}void cal(int n, int m) { if(n>m) swap(n, m); ll ans=1; int r; for(int i=1; i<=n; i=r+1) { r = min(n/(n/i), m/(m/i)); ( ans *= Pow(g[r] * Pow(g[i-1], mo-2) %mo, (ll)(n/i) * (m/i) % (mo-1)) ) %= mo; } printf("%lld\n", ans);}int main() { freopen("product.in", "r", stdin); freopen("product.out", "w", stdout); sieve(N-1); Q=read(); for(int i=1; i<=Q; i++) { n=read(); m=read(); cal(n, m); }}

转载地址:http://jyweo.baihongyu.com/

你可能感兴趣的文章
aliyun阿里云Maven仓库地址
查看>>
jdk1.8 HashMap源码分析(resize函数)
查看>>
再看static数据成员
查看>>
Pthon Matplotlib 画图
查看>>
十种排序算法实例说明总结
查看>>
Python 语言之 map/reduce
查看>>
Vue.js - Day4
查看>>
mysql之用户
查看>>
053(三十五)
查看>>
AddonSU Packages now available for LineageOS 15.1
查看>>
UVa 10970 - Big Chocolate
查看>>
SpringMVC上传图片总结(1)---常规方法进行图片上传,使用了MultipartFile、MultipartHttpServletRequest...
查看>>
小米:开源不仅要站在巨人的肩膀上,还要为巨人指方向
查看>>
百度启动高管退休计划,总裁张亚勤今年十月退休
查看>>
SpringBoot启动时的Banner设置
查看>>
xming + putty 搭建远程图形化ssh访问ubuntu 14.04
查看>>
【Sigma敏捷版系列文章】从运行流程和list-watch看kubernetes系统的设计理念
查看>>
两列布局——但只用右浮动
查看>>
GNOME 网页浏览器 Epiphany 将要进行 5 项改进
查看>>
今年CES最大亮点:智能语音助手正成为新趋势
查看>>