【基础练习】codevs3500 快速幂入门题解

啥也不说了 这是最基础的快速幂了 手打练习一下 非递归的有点点晕 都忘光了

直接上代码

非递归

递归版本写出来是这个样子 两种都不对 原因未知!

//codevs3500 ??? ????????? ??
//copyright by ametake
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;

int mi(long long a,long long b,long long c)
{
    if (b==0) return 1;
    long long x=mi(a,b/2,c);
    long long ans=(x*x)%c;
    if (b&1) ans=(ans*a)%c;
    return ans;
}

int main()
{
	freopen("1.txt","r",stdin);
    long long a,b,c;
    cin>>a>>b>>c;
    cout<<mi(a,b,c)<<endl;
    return 0;
}

以及

//kuaisumidigui;
#include<iostream>
#include<cstdio>
using namespace std;
long long mi(int a,int b,int c);

int main(){
	freopen("1.txt","r",stdin);
	int a,b,c;
	cin>>a>>b>>c;
	cout<<mi(a,b,c);
	return 0;
}
long long mi(int a,int b,int c){
	if (b==0) return 1;
	long long x=mi(a,b/2,c);
	long long ans=(x*x)%c;
	if (b%2==1) ans=(ans*a)%c;
	return ans;
}

里奥同学提供了一种非常简洁明了的两行代码快速幂非递归 但是还是没有过= =不知为什么 哪位大神来看看?

#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;

long long  mi(long long a,long long b,long long c)
{
    for(long long t = a, B = b-1; B; B >>= 1, t = (t%c) * (t%c) % c)
	if(B&1) a = (a%c) * (t%c) % c;
    return a;
}

int main(){
	freopen("1.txt","r",stdin);
	long long a,b,c;
	cin>>a>>b>>c;
	cout<<mi(a,b,c);
	return 0;
}

所以还是写非递归原始版吧···

——一曲高歌一樽酒,一人独钓一江秋。

时间: 2024-12-09 06:21:21

【基础练习】codevs3500 快速幂入门题解的相关文章

codevs3500 快速幂入门题解

//我也是抄的题解 题目描述 Description 输入3个数a,b,c,求a^b mod c=? 输入描述 Input Description 三个数a,b,c 输出描述 Output Description 一个数,即a^b mod c 的答案. 样例输入 Sample Input 5 10 9 样例输出 Sample Output 4 数据范围及提示 Data Size & Hint 0<a,b,c<10000000000000000 #include<cstdio>

矩阵快速幂(入门) 学习笔记hdu1005, hdu1575, hdu1757

矩阵快速幂是基于普通的快速幂的一种扩展,如果不知道的快速幂的请参见http://www.cnblogs.com/Howe-Young/p/4097277.html.二进制这个东西太神奇了,好多优秀的算法都跟他有关系,这里所说的矩阵快速幂就是把原来普通快速幂的数换成了矩阵而已,只不过重载了一下运算符*就可以了,也就是矩阵的乘法,  当然也可以写成函数,标题中的这三个题都是关于矩阵快速幂的基础题.拿来练习练习熟悉矩阵快速幂,然后再做比较难点的,其实矩阵快速幂比较难的是构造矩阵.下面还是那题目直接说话

POJ_Fibonacci POJ_3070(矩阵快速幂入门题,附上自己写的矩阵模板)

Fibonacci Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10521   Accepted: 7477 Description In the Fibonacci integer sequence, F0 = 0, F1 = 1, and Fn = Fn − 1 + Fn − 2 for n ≥ 2. For example, the first ten terms of the Fibonacci sequenc

hdu 1575 Tr A(矩阵快速幂入门)

Tr A Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2977    Accepted Submission(s): 2217 Problem Description A为一个方阵,则Tr A表示A的迹(就是主对角线上各项的和),现要求Tr(A^k)%9973. Input 数据的第一行是一个T,表示有T组数据. 每组数据的第一行有

HDU 1575 Tr A 【矩阵经典2 矩阵快速幂入门】

任意门:http://acm.hdu.edu.cn/showproblem.php?pid=1575 Tr A Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 7572    Accepted Submission(s): 5539 Problem Description A为一个方阵,则Tr A表示A的迹(就是主对角线上各项的和),现要

Codeforces 576D Flights for Regular Customers 矩阵快速幂 (看题解)

Flights for Regular Customers 临接矩阵的 k 次 就是 恰好 走 k 步从 i 走到 j 的方案数, 方案数在这里并不关键, 所以可以把它变成01矩阵. 一个很直观的想法是用二分取check它, 但是这并不单调.. 然后就不会了.. 我们可以把G[ n - 1] [ n - 1 ] 变成  1 , 这个函数就变成单调了, 然后直接二分check就好了, 可以用bitset优化一下, 不优化其实也能过. 还有一种方法就是, 每新加入一条边, 我们暴力跑一遍图取chec

POJ——3070Fibonacci(矩阵快速幂)

Fibonacci Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 12329   Accepted: 8748 Description In the Fibonacci integer sequence, F0 = 0, F1 = 1, and Fn = Fn − 1 + Fn − 2 for n ≥ 2. For example, the first ten terms of the Fibonacci sequenc

hdu 2604 Queuing(矩阵快速幂乘法)

Problem Description Queues and Priority Queues are data structures which are known to most computer scientists. The Queue occurs often in our daily life. There are many people lined up at the lunch time. Now we define that ‘f’ is short for female and

HDU 2604 Queuing (矩阵快速幂)

HDU 2604 Queuing (矩阵快速幂) ACM 题目地址:HDU 2604 Queuing 题意: n个人排队,f表示女,m表示男,包含子串'fmf'和'fff'的序列为O队列,否则为E队列,有多少个序列为E队列. 分析: 矩阵快速幂入门题. 下面引用巨巨解释: 用f(n)表示n个人满足条件的结果,那么如果最后一个人是m的话,那么前n-1个满足条件即可,就是f(n-1): 如果最后一个是f那么这个还无法推出结果,那么往前再考虑一位:那么后三位可能是:mmf, fmf, mff, fff