题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3589;
题意:就是一个裸的雅可比符号:
代码如下:
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <math.h>
using namespace std;
int a[10];
int fac[100500],sum[100500];
int cnt;
void fen(int x){
for(int i=2;i*i<=x;i++){
if(x%i==0){
fac[cnt]=i;
while(x%i==0){
x/=i;
sum[cnt]++;
}
cnt++;
}
}
if(x>0)fac[cnt]=x,sum[cnt++]++;
}
long long quick_mod(int a,int b,int p){
long long ans=1;
while(b){
if(b&1)ans=ans*a%p;
b>>=1;
a=a*a%p;
}
return ans;
}
int main(){
int a,n;
while(scanf("%d%d",&a,&n)!=EOF){
memset(sum,0,sizeof(sum));
cnt=0;
fen(n);
int ans=1;
for(int i=0;i<cnt;i++){
int tmp=(int)quick_mod(a,(fac[i]-1)/2,fac[i]);
if(tmp>1)tmp=-1;
if(tmp==-1&&sum[i]%2==0)
tmp=1;
ans*=tmp;
}
cout<<ans<<endl;
}
return 0;
}