社区讨论

求助,BZOJ AC,洛谷TLE

P3704[SDOI2017] 数字表格参与者 3已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@locb8b19
此快照首次捕获于
2023/10/30 10:57
2 年前
此快照最后确认于
2023/11/04 22:45
2 年前
查看原帖
RT,把BZOJ的数据放在洛谷上跑也能AC,但如果吸氧就会全部T
求助 /kel
CPP
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int Maxn=1e6+10;
const int mod=1e9+7;
int f[Maxn],g[Maxn];
int c[Maxn],mu[Maxn];
int s[Maxn];
bool vis[Maxn];
int n,m,cnt;
int power(int x,long long y)
{
	int ret=1,base=x;
	while(y)
	{
		if(y & 1)ret=(1ll*ret*base)%mod;
		base=(1ll*base*base)%mod;
		y>>=1;
	}
	return ret;
}
inline int inv(int x)
{
	return power(x,mod-2);
}
inline int read()
{
	int s=0,w=1;
	char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
	while(ch>='0' && ch<='9')s=(s<<3)+(s<<1)+(ch^48),ch=getchar();
	return s*w;
}
inline int add(int x,int y)
{
	int tmp=x+y;
	if(tmp>=mod)tmp-=mod;
	return tmp;
}
inline int mul(int x,int y)
{
	return (1ll*x*y)%mod;
}
inline int check(int &x,int y)
{
	x=mul(x,y);
}
inline void put(int x)
{
	if(!x){putchar('0');return;}
	if(x/10)put(x/10);
	putchar(x%10+'0');
}
int main()
{
	// freopen("in.txt","r",stdin);
	// freopen("out.txt","w",stdout);
	int T=read();
	n=1e6;
	mu[1]=1;
	f[1]=g[1]=1;
	for(int i=2;i<=n;++i)
	{
		if(!vis[i])mu[i]=-1,c[++cnt]=i;
		f[i]=add(f[i-1],f[i-2]);
		g[i]=inv(f[i]);
		for(int j=1;j<=cnt;++j)
		{
			int x=i*c[j];
			if(x>n)break;
			vis[x]=1;
			if(i%c[j]==0)break;
			mu[x]=-mu[i];
		}
	}
	fill(s,s+1+n,1);
	int tot=0;
	for(int i=1;i<=n;++i)
	{
		int cur=1;
		for(int j=i;j<=n;j+=i,++cur)
		{
			if(mu[cur]==1)check(s[j],f[i]);
			if(mu[cur]==-1)check(s[j],g[i]);
		}
		tot+=cur;
	}
	// printf("tot = %lld\n",tot);
	for(int i=2;i<=n;++i)
	check(s[i],s[i-1]);
	while(T--)
	{
		n=read(),m=read();
		if(n>m)swap(n,m);
		int ans=1;
		for(int i=1;i<=n;++i)
		{
			int j=min(n/(n/i),m/(m/i));
			int tmp=mul(s[j],inv(s[i-1]));
			tmp=power(tmp,1ll*(n/i)*(m/i));
			check(ans,tmp),i=j;
		}
		put(ans),putchar('\n');
	}
	return 0;
}

回复

3 条回复,欢迎继续交流。

正在加载回复...