版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_41709770/article/details/83239712
题目
题解
–这一看就是数论题。。。个鬼呀
发现最后要使异或值为0,那lastans必须要等于c
然后又因为lastans^ c=b <=> lastans=b ^ c
所以我们倒着异或,就可以得到每个x,再快速幂,得到每个b
就可以得到所有答案
这种恶心的题
绝对有毒
代码
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
const int MAXN=1e5+5;
int p;
int n,a[MAXN],c[MAXN];
int x[MAXN],b[MAXN];
int Pow(long long a,int b){
long long ans=1;
while(b){
if(b&1)
ans=(ans*a)%p;
a=(a*a)%p;
b>>=1;
}
return ans%p;
}
int main(){
cin>>p;
n=1;
while(scanf("%d%d",&a[n],&c[n])==2)
n++;
n--;
for(int i=n-1;i>=1;i--){
x[i]=b[i+1]^c[i+1];
b[i]=Pow(1ll*a[i],x[i]);
}
for(int i=1;i<n;i++)
printf("%d\n",x[i]);
return 0;
}