学了一种新套路,倒序打表函数的逆元可以直接线性完成

#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的更多相关文章

  1. hdu6397 Character Encoding 隔板法+容斥原理+线性逆元方程

    题目传送门 题意:给出n,m,k,用m个0到n-1的数字凑出k,问方案数,mod一个值. 题目思路: 首先如果去掉数字范围的限制,那么就是隔板法,先复习一下隔板法. ①k个相同的小球放入m个不同的盒子 ...

  2. 求组合数、求逆元、求阶乘 O(n)

    在O(n)的时间内求组合数.求逆元.求阶乘.·.· #include <iostream> #include <cstdio> #define ll long long ;// ...

  3. 【bzoj2401】陶陶的难题I “高精度”+欧拉函数+线性筛

    题目描述 求 输入 第一行包含一个正整数T,表示有T组测试数据.接下来T<=10^5行,每行给出一个正整数N,N<=10^6. 输出 包含T行,依次给出对应的答案. 样例输入 7 1 10 ...

  4. 左神算法第五节课:认识哈希函数和哈希表,设计RandomPool结构,布隆过滤器,一致性哈希,岛问题,并查集结构

    认识哈希函数和哈希表 MD5Hash值的返回范围:0~9+a~f,是16位,故范围是0~16^16(2^64)-1, [Hash函数],又叫散列函数: Hash的性质: 1)  输入域无穷大: 2)  ...

  5. [SDOI2008]沙拉公主的困惑 线性筛_欧拉函数_逆元_快速幂

    Code: #include<cstdio> using namespace std; typedef long long ll; const int maxn=10000000+1; l ...

  6. bzoj2693--莫比乌斯反演+积性函数线性筛

    推导: 设d=gcd(i,j) 利用莫比乌斯函数的性质 令sum(x,y)=(x*(x+1)/2)*(y*(y+1)/2) 令T=d*t 设f(T)= T可以分块.又由于μ是积性函数,积性函数的约束和 ...

  7. COGS2531. [HZOI 2016]函数的美 打表+欧拉函数

    题目:http://cogs.pw/cogs/problem/problem.php?pid=2533 这道题考察打表观察规律. 发现对f的定义实际是递归式的 f(n,k) = f(0,f(n-1,k ...

  8. 欧拉函数 cojs 2181. 打表

    cojs 2181. 打表 ★☆   输入文件:sendtable.in   输出文件:sendtable.out   简单对比时间限制:1 s   内存限制:256 MB [题目描述] 有一道比赛题 ...

  9. bzoj 2186 [Sdoi2008]沙拉公主的困惑(欧拉函数,逆元)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2186 [题意] 若干个询问,求1..n!中与m!互质的个数. [思路] 首先有gcd( ...

随机推荐

  1. Django之Form操作

    一.Form基础 (一)Form的作用 Django的Form主要有以下几大作用: 生成HTML标签 验证用户数据(显示错误信息) Form提交保留上次提交数据 初始化页面显示数据 (二)实例 一般网 ...

  2. iftop简单使用

    在linux下想查看当前与主机通信的IP有哪些?流量多少?怎么办?使用iftop吧,小巧实用的小工具.在排查问题的时候能起到大作用. centos安装 yum install iftop 界面如下: ...

  3. list集合获取相同以及不同的对象

    List<StyleMenuModule> list1 = new ArrayList<>(); StyleMenuModule s1 = new StyleMenuModul ...

  4. linux上安装php phpredis扩展

    linux 下安装redis以及php Redis扩展 环境配置: centos6.0 nginx/1.0.0 php/5.3.8 mysql/5.5.17 步骤一.下载redis 可以去http:/ ...

  5. SQL关于:警告: 聚合或其他 SET 操作消除了空值。

    方法一: create table tb ( id int, num int ) insert into tb select 1,10 insert into tb select 1,20 inser ...

  6. cookie和session 的初步介绍

    Cookie和Session http协议不保存用户状态(信息) Cookie和Session都是为了能够保存用户信息 Cookie: 本质:保存在浏览器上的键值对 用途:标识当前用户信息 cooki ...

  7. drag事件

    <!DOCTYPE HTML><html>  <head>      <title>拖动事件</title>    <style> ...

  8. 在Windows的控制台和Linux的终端中显示加载进度

    Windows中 #include <stdio.h> #include <windows.h> int main() { ;//任务完成总量 int i; ; i < ...

  9. python轻松实现代码编码格式转换

    python轻松实现代码编码格式转换 最近刚换工作不久,没太多的时间去整理工作中的东西,大部分时间都在用来熟悉新公司的业务,熟悉他们的代码框架了,最主要的是还有很多新东西要学,我之前主要是做php后台 ...

  10. strlen、strcpy和strcmp源码

    1.不使用库函数实现strcpy #include <assert.h> char *strcpy(char *dst, const char *src) { assert((dst != ...