hdu 2685 I won't tell you this is about number theory
2015-06-08 16:45
246 查看
#include<stdio.h>
#include<string.h>
#define LL __int64
LL mult_mod(LL a,LL b,LL c)
{
a%=c;
b%=c;
LL ret=0;
while(b)
{
if(b&1){ret+=a;ret%=c;}
a<<=1;
if(a>=c)a%=c;
b>>=1;
}
return ret;
}
LL PowerMod(LL a, LL b, LL c)
{
LL ans = 1;
LL k = a % c;
while(b>0) //(k*k % c)2^b %c
{
if(b&1)
ans = mult_mod(ans,k,c);
b = b>>1;
k = mult_mod(k,k,c);
}
return ans;
}
LL gcd(LL a,LL b)
{
if(a==0){return b;}
return gcd(b%a,a);
}
int main()
{
int T;
scanf("%d",&T);
LL a,m,n,k,G;
while(T--)
{
scanf("%I64d%I64d%I64d%I64d",&a,&m,&n,&k);
if(m>n)
{
G = gcd(n,m);
}
else
{
G = gcd(m,n);
}
printf("%I64d\n",(PowerMod(a,G,k)+k-1%k)%k);
}
}
/*
gcd(a^m - 1,a^n - 1) = a^gcd(m,n) - 1
hint:
计算减法的时候 为了保证结果是正数。
a-b % k -> (a%k + k - b%k)%k
*/
#include<string.h>
#define LL __int64
LL mult_mod(LL a,LL b,LL c)
{
a%=c;
b%=c;
LL ret=0;
while(b)
{
if(b&1){ret+=a;ret%=c;}
a<<=1;
if(a>=c)a%=c;
b>>=1;
}
return ret;
}
LL PowerMod(LL a, LL b, LL c)
{
LL ans = 1;
LL k = a % c;
while(b>0) //(k*k % c)2^b %c
{
if(b&1)
ans = mult_mod(ans,k,c);
b = b>>1;
k = mult_mod(k,k,c);
}
return ans;
}
LL gcd(LL a,LL b)
{
if(a==0){return b;}
return gcd(b%a,a);
}
int main()
{
int T;
scanf("%d",&T);
LL a,m,n,k,G;
while(T--)
{
scanf("%I64d%I64d%I64d%I64d",&a,&m,&n,&k);
if(m>n)
{
G = gcd(n,m);
}
else
{
G = gcd(m,n);
}
printf("%I64d\n",(PowerMod(a,G,k)+k-1%k)%k);
}
}
/*
gcd(a^m - 1,a^n - 1) = a^gcd(m,n) - 1
hint:
计算减法的时候 为了保证结果是正数。
a-b % k -> (a%k + k - b%k)%k
*/
相关文章推荐
- Opencv笔记(1) 命名规则数据结构(CvMat,...)
- hadoop yarn 代码示例及架构
- hive sql join
- Java加密技术(二)对称加密算法DES&AES
- 内存对其
- (转载)RTorrent 命令行使用说明
- Hibernate+Spring配置
- ubuntu 关机,重启,注销命令
- recv send 阻塞和非阻塞
- PerformanceCounter
- 9. C#数据结构与算法 -- 线性存储结构(线性表之顺序表,动态数组和泛型实现)
- DIV显示和隐藏用法(二)
- SAT作文批改实例讲解
- 云计算应用与Pispower云计算平台
- cocos2d-js 热更新详解(一)
- 总结几个C语言中的坑(二)
- 机器学习--高斯判别分析
- 机器学习-逻辑回归
- tomcat做文件服务器
- RBD和AOF持久化对比