hdu 3589(二次剩余+雅可比符号)
Posted leader_win
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdu 3589(二次剩余+雅可比符号)相关的知识,希望对你有一定的参考价值。
题目链接: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; }
以上是关于hdu 3589(二次剩余+雅可比符号)的主要内容,如果未能解决你的问题,请参考以下文章