模板—十进制快速幂

用于指数爆longlong的情况,当然你也可以打高精……

因为昨天有人提到了慢速乘,感觉挺有用的,就顺便都学了吧,而且省选也用到十进制快速幂了。

#include<iostream>
#include<cstring>
#include<cstdio>
#define LL long long
using namespace std;
char c[100000];
LL a,p,t;
LL tenthpow(LL a)
{
	LL ans=1,s=a;
	while(t>=0)
	{
		LL cnt=c[t]-‘0‘,cur=s;
		for(int i=1;i<=cnt;i++)
		ans=ans*s%p;
		for(int i=1;i<10;i++)
		cur=cur*s%p;
		s=cur;ans%=p;t--;
	}
	return ans;
}
signed main()
{
	cin>>a>>c>>p;
	t=strlen(c);t--;
	cout<<tenthpow(a)<<endl;
}

原文地址:https://www.cnblogs.com/Al-Ca/p/11186778.html

时间: 2024-10-07 05:07:39

模板—十进制快速幂的相关文章

bzoj 3240 矩阵乘法+十进制快速幂

首先,构造出从f[][i]->f[][i+1]的转移矩阵a,和从f[i][m]->f[i+1][1]的转移矩阵b, 那么从f[1][1]转移到f[n][m]就是init*(a^(m-1)*b)^(n-1)*(a^(m-1)). 然后用用十进制快速幂(因为输入用的是10进制,这样就避免了高精度除法). 第一次写十进制快速幂,大概的思想是维护当前位是1-9的要乘的矩阵,然后再通过这9个矩阵自己转移. 1 /**********************************************

bzoj 3240: [Noi2013]矩阵游戏 矩阵乘法+十进制快速幂+常数优化

3240: [Noi2013]矩阵游戏 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 613  Solved: 256[Submit][Status] Description 婷婷是个喜欢矩阵的小朋友,有一天她想用电脑生成一个巨大的n行m列的矩阵(你不用担心她如何存储).她生成的这个矩阵满足一个神奇的性质:若用F[i][j]来表示矩阵中第i行第j列的元素,则F[i][j]满足下面的递推式: F[1][1]=1F[i,j]=a*F[i][j-1]+

10.02 T3 打表找递推式+十进制快速幂 九校联考凉心模拟DAY1T1

题目背景 金企鹅同学非常擅长用1*2的多米诺骨牌覆盖棋盘的题.有一天,正 在背四六级单词的他忽然想:既然两个格子的积木叫“多米诺(domino)”,那 么三个格子的的积木一定叫“三米诺(tromino)”了!用三米诺覆盖棋盘的题 怎么做呢? 题目描述 用三米诺覆盖3n 的矩形棋盘,共多少种方案?三米诺可旋转:两种 方案不同当且仅当这两种图案直接覆盖在一起无法重叠. 输入输出格式 输入格式: 一行一个整数n(n<=10^40000),表示棋盘列数. 输出格式: 一行一个整数,表示方案数,对9982

十进制快速幂

给你一个大数n,求2的n次幂: 由于n很大,用普通的快速幂已经不能够很快的算出了,因为不好判断奇偶以及除2这些,不过不过用十进制快速幂求普通的ll及int型数也很快: #include<bits/stdc++.h> using namespace std; typedef long long ll; const int maxn=1e4+5; int mod=1e9+7; ll qpow(ll a,ll b) { if(b==0) return 1; ll ans=1; while(b) {

【模板】快速幂取模

快速幂取模的模板,要注意所有变量都要开成long long类型的防溢出: #include<cstdio> #include<algorithm> #include<cstring> typedef long long LL; const LL mod=1e9+7; using namespace std; LL a,b; LL mi(LL x,LL y) { LL res=1; while(y){ if(y&1) res=res*x%mod; y>>

模板——矩阵快速幂

/************************************************ Author :powatr Created Time :2015-8-5 21:06:30 File Name :b.cpp ************************************************/ #include <cstdio> #include <algorithm> #include <iostream> #include <s

【模板】快速幂

普通的快速幂,用于矩阵的版本稍后更新 1 #include<stdio.h> 2 #define lll long long 3 lll ksm(int,int); 4 int x,n; 5 int main() 6 { 7 scanf("%d%d",&x,&n); 8 printf("%lld",ksm(x,n)); 9 return 0; 10 } 11 lll ksm(int x,int n) 12 { 13 lll ret = x

[模板] 矩阵快速幂

矩阵快速幂是一个快速幂的延伸,但实际上区别不大,主要思想是一样的. 题干: 题目背景 矩阵快速幂 题目描述 给定n*n的矩阵A,求A^k 输入输出格式 输入格式: 第一行,n,k 第2至n+1行,每行n个数,第i+1行第j个数表示矩阵第i行第j列的元素 输出格式: 输出A^k 共n行,每行n个数,第i行第j个数表示矩阵第i行第j列的元素,每个元素模10^9+7 输入输出样例 输入样例#1: 复制 2 1 1 1 1 1 输出样例#1: 复制 1 1 1 1 说明 n<=100, k<=10^1

【模板】 快速幂快速积

1 long long ksj(long long a,long long b,long long c)    //快速积取模 a*b%c  2 { 3     long long ans=0; 4     while(b){ 5         if(b&1) 6             ans=(ans+a)%c; 7         a=(a+a)%c; 8         b>>=1;  9     } 10     return ans; 11 }  12 13 long l