社区讨论
P4139被卡常了怎么办啊....
题目总版参与者 5已保存回复 4
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 4 条
- 当前快照
- 1 份
- 快照标识符
- @mi6omuo2
- 此快照首次捕获于
- 2025/11/20 08:17 4 个月前
- 此快照最后确认于
- 2025/11/20 08:17 4 个月前
#
#
#
#
#
#
#
#
#
#
这样换算的话,#总用时
然而本蒟蒻实在想不出来怎么减小常数了,求教。
CPP// luogu-judger-enable-o2
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int p;
int t;
int phi(int x)
{
int ans=x;
for(int i=2;i<=x;i++)
if(x%i==0)
{
ans/=i;ans*=i-1;
while(x%i==0) x/=i;
}
if(x^1) ans/=x,ans*=x-1;
return ans;
}
long long pow2(long long a,long long b,int p)
{
long long res=1;
for(;b;b>>=1,a=a*a%p) if(b&1) res=res*a%p;
return res%p;
}
int work(int p)
{
if(p==1) return 0;
int num=0;
while(~p&1) p>>=1,++num;
int pi=phi(p);int now=work(pi);
(now+=pi-num%pi)%=pi;
now=pow2(2,now,p);
return now<<num;
}
int main()
{
scanf("%d",&t);
while(t--) scanf("%d",&p),printf("%d\n",work(p));
return 0;
}
回复
共 4 条回复,欢迎继续交流。
正在加载回复...