转化高精的取模

给定a,n,m,请你计算a^n mod m的值。
a,m <= 10^9,n <= 10^1000
方法:修改快速幂算法。
输入的数据以十进制给出,为了避免高精度的进制转换,我们可以将快速幂算法迁移到十进制。

例如k=1093425
ak=(a1)5*(a10)2*(a100)4*(a1000)^3…
所以我们只需要算出a1,a10,a^100…
类似地,我们可以用递推来算以上的序列
一个数为前一个数的十次方

int b[N],n; //高精度数,表示n
int ksm(int a,int m) {
	int ans=1;
	for(int i=0;i<n;++i) {
		for(int j=0;j<b[i];++j) ans=1ll*ans*a%m;
		int tmp=1;
		for(int j=0;j<10;++j) tmp=1ll*tmp*a%m;
		a=tmp;//乘十次
	}
	return ans;
} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值