累乘函数线性逆元打表,阶乘反演——bzoj4816
学了一种新套路,倒序打表函数的逆元可以直接线性完成
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define LL long long
const long long mod = 1e9+;
#define maxn 1000001 LL Pow(LL a,LL b){
if (!b)
return 1LL;
LL x=Pow(a,b/);
x=x*x%mod;
if (b&1LL)
x=x*a%mod;
return x;
}
/*ll Pow(ll a,ll b){
ll res=1;
while(b){
if(b%2)
res=res*a%mod;
b>>=1;a=a*a%mod;
}
return res;
}*/
ll n,m;
ll F[maxn],pre[maxn],invF[maxn];
void init1(){
F[]=;F[]=;
for(int i=;i<maxn;i++)
F[i]=(F[i-]+F[i-])%mod;
pre[]=;
for(int i=;i<maxn;i++)//临时数组算累乘
pre[i]=pre[i-]*F[i]%mod; ll tmp=Pow(pre[maxn-],mod-);
for(int i=maxn-;i>=;i--)
invF[i]=tmp*pre[i-]%mod,tmp=tmp*F[i]%mod;
} bool vis[maxn];
ll prime[maxn],mm,mu[maxn];
void init2(){
mu[]=;
for(int i=;i<maxn;i++){
if(!vis[i]){
mu[i]=-;
prime[++mm]=i;
}
for(int j=;j<=mm;j++){
if(i*prime[j]>=maxn)break;
vis[i*prime[j]]=;
if(i%prime[j]==){
mu[i*prime[j]]=;
break;
}
else mu[i*prime[j]]=-mu[i];
}
}
} ll mul[maxn],invmul[maxn],g[maxn];
void init3(){
for(int i=;i<maxn;i++)g[i]=;
for(int i=;i<maxn;i++)
for(int j=;j*i<maxn;j++){
if(mu[j]==)
g[i*j]=g[i*j]*F[i]%mod;
else if(mu[j]==-)
g[i*j]=g[i*j]*invF[i]%mod;
}
mul[]=;
for(int i=;i<maxn;i++)
mul[i]=mul[i-]*g[i]%mod;
invmul[maxn-]=Pow(mul[maxn-],mod-);
for(int i=maxn-;i>=;i--)
invmul[i]=invmul[i+]*g[i+]%mod;
} int main(){
int t;cin>>t;
init1();
init2();
init3();
while(t--){
cin>>n>>m;
if(n>m)swap(n,m);
ll ans=;
for(int l=,r;l<=n;l=r+){
r=min(n/(n/l),m/(m/l));
ll tmp=mul[r]*invmul[l-]%mod;
ans=ans*Pow(tmp,(n/l)*(m/l)%(mod-))%mod;
}
cout<<ans<<'\n';
}
}
累乘函数线性逆元打表,阶乘反演——bzoj4816的更多相关文章
- hdu6397 Character Encoding 隔板法+容斥原理+线性逆元方程
题目传送门 题意:给出n,m,k,用m个0到n-1的数字凑出k,问方案数,mod一个值. 题目思路: 首先如果去掉数字范围的限制,那么就是隔板法,先复习一下隔板法. ①k个相同的小球放入m个不同的盒子 ...
- 求组合数、求逆元、求阶乘 O(n)
在O(n)的时间内求组合数.求逆元.求阶乘.·.· #include <iostream> #include <cstdio> #define ll long long ;// ...
- 【bzoj2401】陶陶的难题I “高精度”+欧拉函数+线性筛
题目描述 求 输入 第一行包含一个正整数T,表示有T组测试数据.接下来T<=10^5行,每行给出一个正整数N,N<=10^6. 输出 包含T行,依次给出对应的答案. 样例输入 7 1 10 ...
- 左神算法第五节课:认识哈希函数和哈希表,设计RandomPool结构,布隆过滤器,一致性哈希,岛问题,并查集结构
认识哈希函数和哈希表 MD5Hash值的返回范围:0~9+a~f,是16位,故范围是0~16^16(2^64)-1, [Hash函数],又叫散列函数: Hash的性质: 1) 输入域无穷大: 2) ...
- [SDOI2008]沙拉公主的困惑 线性筛_欧拉函数_逆元_快速幂
Code: #include<cstdio> using namespace std; typedef long long ll; const int maxn=10000000+1; l ...
- bzoj2693--莫比乌斯反演+积性函数线性筛
推导: 设d=gcd(i,j) 利用莫比乌斯函数的性质 令sum(x,y)=(x*(x+1)/2)*(y*(y+1)/2) 令T=d*t 设f(T)= T可以分块.又由于μ是积性函数,积性函数的约束和 ...
- COGS2531. [HZOI 2016]函数的美 打表+欧拉函数
题目:http://cogs.pw/cogs/problem/problem.php?pid=2533 这道题考察打表观察规律. 发现对f的定义实际是递归式的 f(n,k) = f(0,f(n-1,k ...
- 欧拉函数 cojs 2181. 打表
cojs 2181. 打表 ★☆ 输入文件:sendtable.in 输出文件:sendtable.out 简单对比时间限制:1 s 内存限制:256 MB [题目描述] 有一道比赛题 ...
- bzoj 2186 [Sdoi2008]沙拉公主的困惑(欧拉函数,逆元)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2186 [题意] 若干个询问,求1..n!中与m!互质的个数. [思路] 首先有gcd( ...
随机推荐
- python_django_上传文件
存储路径: 存储在服务器的项目的static/upfile(你说了算的文件名,但是一般俺们叫这个)文件中 配置: 配置settings.py文件 MDEIA_ROOT = os.path.join(B ...
- spring security学习总结
这几天一直在学习spring security的相关知识.逛各大论坛,看相关api与教学视频,获益良多! 简介 Spring Security是为基于Spring的企业应用系统提供声明式的安全访问控制 ...
- javascript null vs undefined
这个是很古老的问题了. 一直存在争议,有些人认为,很多语言没用 undefined 也活的好好,为啥要 undefined 呢. 那有了 undefined 是否还需要 null 呢 ? typesc ...
- vue中使用v-if判断数组长度是出现length报错
在vue中使用v-if判断数组的长度时出现报错 <el-collapse-item :key="index" v-if="data.childrens.length ...
- CSS3 @media 查询(制作响应式布局)
这里简单说明一下@media 查询. 详细说明文档:http://www.runoob.com/cssref/css3-pr-mediaquery.html 使用 @media 查询,你可以针对不同的 ...
- iOS: NSTimer使用小记
目录 1. NSRunLoopCommonModes和Timer 2. NSThread和Timer 3. GCD中的Timer 返回目录 1. NSRunLoopCommonModes和Timer ...
- 初探gitlab & gitlab-runner & asp.net core持续集成
文章简介 gitlab & gitlab-runner 简介 基于gitlab & gitlab-runner 的asp.net core webapi 极简持续集成实践 gitla ...
- PAT_A1038#Recover the Smallest Number
Source: PAT A1038 Recover the Smallest Number (30 分) Description: Given a collection of number segme ...
- Python 变量作用域 LEGB (下)—— Enclosing function locals
上篇:Python 变量作用域 LEGB (上)—— Local,Global,Builtin https://www.cnblogs.com/yvivid/p/python_LEGB_1.html ...
- 线性回归——Python代码实现
import numpy as np def computer_error_for_give_point(w, b, points): # 计算出 观测值与计算值 之间的误差, 并累加,最后返回 平均 ...