题目链接:
题目内容:
Little Sub has just received an equation, which is shown below, as his birthday gift.
Given the value of , please help Little Sub count the number of x(1<=x<=2^p)
which satisfies the equation.
Input
There are multiple test cases. The first line of the input contains an integer T (about 1000), indicating the number of test cases. For each test case:
The first and only line contains two integers a and p (1<=a<=10^9, 1<=p<=30).
Output
For each test case output one line containing one integer, indicating the answer.
Sample Input
2
6 12
8 16
Sample Output
1023
16383
打表一下会发现:
当n为奇数是,只有一个满足题意;
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
#define int long long
int ksm(int x,int y,int p){
int res=1;
while(y){
if(y&1) res=res*x%p;
x=x*x%p;
y/=2;
}
return res%p;
}
signed main(){
int t;
cin>>t;
while(t--){
int n,p;
cin>>n>>p;
if(n%2==1) {
cout<<"1\n";
continue;
}
else{
int ans=0;
int mod=1<<p;
for(int i=1;i<=p;i++){
if(ksm(n,i,mod)%mod==ksm(i,n,mod)%mod){
ans++;
}
}
int op=p/n;
if(p%n) op++;
int l=1<<op;
ans+=(mod/l-p/l);
cout<<ans<<"\n";
}
}
}