求助玄学编译错误
  • 板块学术版
  • 楼主_LanFeng_
  • 当前回复8
  • 已保存回复8
  • 发布时间2021/9/19 17:46
  • 上次更新2023/11/4 06:15:15
查看原帖
求助玄学编译错误
65190
_LanFeng_楼主2021/9/19 17:46
#include<bits/stdc++.h> 
#define ull unsigned long long
#define ll long long//这一行
using namespace std;
const int N=1e5+10; 
ll y,z,p;
ll Pow[N];
struct Node
{
	ll id,val;
}b[N];
int read()
{
    int x=0,f=1;char s=getchar();
    while(s<'0'||s>'9'){if(s=='-')f=-f;s=getchar();}
    while(s>='0'&&s<='9'){x=x*10+s-48;s=getchar();}
    return x*f;
}
ll quickpow(ll a,ll b,ll c)
{
	ll res=1;
	while(b)
	{
		if(b&1) res=res*a%c;
		a=a*a%c;
		b>>=1;
	}
	return res;
}
bool cmp(Node i,Node j)
{
	if(i.val==j.val) return i.id<j.id;
	return i.val<j.val;
}
ll exgcd(ll a,ll b,ll &x,ll &y)
{
	if(!b)
	{
		x=1,y=0;
		return a;
	}
	ll x2,y2;
	ll d=exgcd(b,a%b,x2,y2);
	x=y2,y=x2-y2*(a/b);
	return d;
}
ll find(ll x,ll Max)
{
	ll l=1,r=Max-1,mid,ans=-1;
	while(l<=r)
	{
		mid=l+r>>1;
		if(b[mid].val==x)
		{
			ans=b[mid].id;
			r=mid-1;
		}
		else if(b[mid].val>x) r=mid-1;
		else l=mid+1;
	}
	return ans;
}
int main() 
{
	int t=read(),k=read();
	while(t--)
	{
		y=read(),z=read(),p=read();
		if(k==1) printf("%lld\n",quickpow(y,z,p));
		else if(k==2)
		{
			ll a,b
			ll d=exgcd(y,p,a,b);
			if(z%d!=0) printf("Orz, I cannot find x!\n");
			else 
			{
				a*=z/d;
				printf("%lld\n",(a%(p/d)+p/d)%(p/d));
			}
		}
		else
		{
			if(y%p==0)
			{
				if(z==0) printf("0\n");
				else printf("Orz, I cannot find x!\n");
				continue;
			}
			ll Max=(ll)sqrt(p-2);
			Pow[0]=1;
			for(ll i=1;i<=Max;i++)
			Pow[i]=Pow[i-1]*y%p;
			for(int i=1;i<Max;i++)
			{
				b[i].val=Pow[i];
				b[i].id=i;
			}
			sort(b+1,b+Max,cmp); 
			ll q=0,totpow=1;
			bool flag=0;
			while(q*Max<p-1)
			{
				ll l,k,d;
				d=exgcd(totpow,p,l,k);
				l*=z;
				l=(l%p+p)%p;
				ll ans=find(l,Max);
				if(ans!=-1) 
				{
					flag=1;
					ans+=q*Max;
					break;
				}
			}
			if(!flag) printf("Orz, I cannot find x!\n");
			else printf("%lld\n",ans);
		}
	} 
    return 0;
}

代码中注释的一行要将ll换成LL,但是我以前用的都是ll...编译器报错:expected initializer before long

2021/9/19 17:46
加载中...