P4917 天守阁的地板
天守阁的地板
题意即求:
其中
直接推导:
预处理后,后面的那一部分整除分块即可。
时间复杂度
代码:
#include<iostream>
#include<cstdio>
#define ll long long
using namespace std;
namespace Ehnaev{
inline ll read() {
ll ret=0,f=1;char ch=getchar();
while(ch<48||ch>57) {if(ch==45) f=-f;ch=getchar();}
while(ch>=48&&ch<=57) {ret=(ret<<3)+(ret<<1)+ch-48;ch=getchar();}
return ret*f;
}
inline void write(ll x) {
static char buf[22];static ll len=-1;
if(x>=0) {do{buf[++len]=x%10+48;x/=10;}while(x);}
else {putchar(45);do{buf[++len]=-(x%10)+48;x/=10;}while(x);}
while(len>=0) putchar(buf[len--]);
}
}using Ehnaev::read;using Ehnaev::write;
inline void writeln(ll x) {write(x);putchar(10);}
const ll mo=19260817,N=1e6;
inline ll Qpow(ll b,ll p) {
ll r=1;while(p) {if(p&1) r=r*b%mo;b=b*b%mo;p>>=1;}return r;
}
ll T,n,cnt;
ll mu[N+5],prime[N+5],f[N+5],fc[N+5];
bool ff[N+5];
inline void Init() {
ff[1]=1;mu[1]=1;
for(ll i=2;i<=N;i++) {
if(!ff[i]) {prime[++cnt]=i;mu[i]=mo-1;}
for(ll j=1;j<=cnt&&i*prime[j]<=N;j++) {
ff[i*prime[j]]=1;
if(i%prime[j]==0) {
mu[i*prime[j]]=0;break;
}
mu[i*prime[j]]=mu[i]*mu[prime[j]]%mo;
}
}
fc[0]=1;f[0]=1;
for(ll i=1;i<=N;i++) {fc[i]=fc[i-1]*i%mo;f[i]=1;}
for(ll i=1;i<=N;i++) {
if(mu[i]==0) continue;
ll tmp=i*i%mo;ll invtmp=Qpow(tmp,mo-2);
for(ll j=i;j<=N;j+=i) {
if(mu[i]==mo-1) f[j]=f[j]*invtmp%mo;
else f[j]=f[j]*tmp%mo;
}
}
for(ll i=1;i<=N;i++) f[i]=f[i-1]*f[i]%mo;
}
int main() {
T=read();Init();
while(T--) {
n=read();ll ans=1;
for(ll i=1,j;i<=n;i=j+1) {
j=n/(n/i);
ll tmp=f[j]*Qpow(f[i-1],mo-2)%mo;
tmp=Qpow(tmp,(n/i)*(n/i)%(mo-1)+mo-1);
ans=ans*tmp%mo;
}
ans=ans*Qpow(fc[n],2*n)%mo;
writeln(ans);
}
return 0;
}
标签:
数论函数相关
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现