社区讨论
萌新求助
P2485[SDOI2011] 计算器参与者 16已保存回复 16
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 16 条
- 当前快照
- 1 份
- 快照标识符
- @mi7wvjkc
- 此快照首次捕获于
- 2025/11/21 04:56 4 个月前
- 此快照最后确认于
- 2025/11/21 06:35 4 个月前
萌新刚学数论,一直75,求助=w=
CPP#include <bits/stdc++.h>
using namespace std;
#define int long long
int t,k;
int ksm(int a,int b,int c)
{
int res=1;
while(b)
{
if(b&1)
{
res=res*a%c;
}
a=a*a%c;
b>>=1;
}
return res;
}
main()
{
cin>>t>>k;
if(k==1)
{
while(t--)
{
int x,y,z;
scanf("%lld%lld%lld",&x,&y,&z);
printf("%lld\n",ksm(x,y,z));
}
return 0;
}
if(k==2)
{
while(t--)
{
int x,y,z;
scanf("%lld%lld%lld",&x,&y,&z);
x%=z;
y%=z;
if(x==0&&y!=0)
{
printf("Orz, I cannot find x!\n");
continue;
}
printf("%lld\n",ksm(x,z-2,z)*y%z);
}
return 0;
}
while(t--)
{
map<int,int> mp,j;
int a,b,p;
cin>>a>>b>>p;
int m=sqrt(p);
for(int i=0;i<=m;i++)
{
mp[b]=1;
j[b]=i;
b=b*a%p;
}
int k=ksm(a,m,p),k1=k,flag=1;
for(int i=1;i<=m;i++)
{
k1%=p;
if(mp[k1])
{
printf("%lld\n",i*m-j[k1]);
flag=0;
break;
}
k1*=k;
}
if(flag)
{
printf("Orz, I cannot find x!\n");
}
}
}
回复
共 16 条回复,欢迎继续交流。
正在加载回复...