A 青蛙 POJ 1061 扩展gcd
#include
#include
#include
using namespace std;
long long extgcd(long long a,long long b,long long &x,long long &y)
{
int d = a;
if(b != 0)
{
d = extgcd(b, a%b, y, x);
y-= (long long)(a/b) * x;
}
else
{
x = 1;
y = 0;
}
//cout<<" x :"<>x>>y>>m>>n>>l;
long long c=y-x; ///ax+by = c
long long gcd,temp;
gcd = extgcd(m-n,l,p,q); ///gcd 最大公约数
if(c % gcd != 0) ///c不为gcd的倍数则无解
cout<<"Impossible"<
C
周期 扩展gcdD POJ 1995 幂和 快速幂
#include
using namespace std;
typedef long long ll;
ll mod_pow(ll x, ll n, ll mod)
{
if(n == 0)
return 1;
ll res = mod_pow(x * x % mod, n / 2, mod); /// 递归直到0次方
if(n & 1) /// n二进制与1二进制得数取最后一位(为奇数)【n为奇数要*x】
res = res * x % mod;
return res;
}
int main()
{
int n,mod;
cin>>n;
while(n--)
{
int m, sum = 0, x, y;
cin>>mod;
cin>>m;
while(m--)
{
cin>>x>>y;
sum = sum + mod_pow(x, y, mod); /// 多项和取幂等于分别取幂再取幂
}
cout << sum % mod << endl;
}
return 0;
}
E
最小公倍数 gcd