1、什么是模幂运算问题

  • 给出a, k, mod
  • 计算ak(%mod)a^k (\%mod)ak(%mod)的值
  • k是一个非常大的正整数(超过1e7)

附,一个可以提交的地方:
leetcode 372. 超级次方

class Solution {public:int pows(int a, int k){a %= 1337;if(k==0)return 1;int pp = pows(a,k/2)%1337;if(k%2==1)return pp*pp%1337*a%1337;else return pp*pp%1337;}int superPow(int a, vector<int>& b) {if(b.empty())return 1;int last = b.back();  b.pop_back();return pows(a,last)*pows(superPow(a,b),10)%1337;}
};

2、解决方法

朴素算法:

  • 循环k次,每次乘上a,模上mod就行。

重复-平方算法:

  • 即快速幂,有递归写法和非递归写法
  • 递归做法的递推公式如下:
  • 循环做法:
    将k表示为二进制,即每次最后一位为1,就是奇数,否则为偶数,不断右移,模拟递归过程,继续用上面的公式即可。。

附GUI效果图:

C#代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Timers;namespace 模幂运算问题
{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){int a = Convert.ToInt32(textBox1.Text);int k = Convert.ToInt32(textBox2.Text);int mod = Convert.ToInt32(textBox3.Text);DateTime start = System.DateTime.Now;int res = 1;for(int i = 1; i <= k; i++){res *= a;res %= mod;}DateTime end = System.DateTime.Now;TimeSpan ts = end.Subtract(start);label7.Text = Convert.ToString(res);label9.Text = Convert.ToString(ts.TotalMilliseconds);}private void button2_Click(object sender, EventArgs e){int a = Convert.ToInt32(textBox1.Text);int k = Convert.ToInt32(textBox2.Text);int mod = Convert.ToInt32(textBox3.Text);DateTime start = System.DateTime.Now;int res = 1;while ( k != 0 ){if ((k&1) == 1){res = res * a % mod;}a = a * a % mod;k >>= 1;}DateTime end = System.DateTime.Now;TimeSpan ts = end.Subtract(start);label8.Text = Convert.ToString(res);label10.Text = Convert.ToString(ts.TotalMilliseconds);}}
}

模幂运算问题,使用朴素算法和重复-平方算法(快速幂+C#计算程序运行时间)相关推荐

  1. 幂运算 数组_Super Pow:如何高效进行模幂运算

    点击上方蓝字设为星标 东哥带你搞定算法~ 今天来聊一道与数学运算有关的算法题目,LeetCode 372 题 Super Pow,让你进行巨大的幂运算,然后求余数. int superPow(int ...

  2. 《算法基础》——2.3 求幂运算

    本节书摘来自华章计算机<算法基础>一书中的第2章,第2.3节,作者:(美)罗德·斯蒂芬斯(Rod Stephens)著,更多章节内容可以访问云栖社区"华章计算机"公众号 ...

  3. 算法笔记之——快速幂

    哈喽!这里是一只派大鑫,不是派大星.本着基础不牢,地动山摇的学习态度,从基础的C语言语法讲到算法再到更高级的语法及框架的学习.更好地让同样热爱编程(或是应付期末考试 狗头.jpg)的大家能够在学习阶段 ...

  4. 分治算法——快速幂(平方求幂)

    分治算法--快速幂(平方求幂) 什么是快速幂呢,我们先来看维基百科对快速幂的解释: 在数学和程序设计中,平方求幂(英语:exponentiating by squaring)或快速幂是快速计算一个数( ...

  5. 算法分类整理+模板①:矩阵快速幂

    一直有一个想法,感觉自己很多基础算法不是很扎实,想要找个机会写一些算法的整理,顺便自己总结一些实用的模板. 最近偶然在训练赛中连续做了2道思维+矩阵快速幂的题目,碰巧有时间,就以矩阵快速幂作为这个系列 ...

  6. python基础知识之整除、取余、幂运算

    数字和表达式 python解释器可以当作计算器使用 >>>2+2 4 整数除法 一个整数被另一个整数除,计算结果的小数部分被截去,只保留整数部分. 如果参与除法的两个数中有一个为浮点 ...

  7. 快速幂算法 超详细教程

    快速幂 求幂运算 快速幂引入 快速幂 二进制 快速幂 指数折半 快速幂的应用 求幂运算 求幂运算大家都不陌生,幂是指数运算的结果,当m是正整数时nᵐ的意义为m个n相乘,n的m次幂也就是n的m次方.用代 ...

  8. 快速幂运算——人见人爱A^B

    题目链接:Problem - 2035 (hdu.edu.cn) Problem Description 求A^B的最后三位数表示的整数. 说明:A^B的含义是"A的B次方" In ...

  9. Java算法学习——快速幂

    快速幂 快速幂:顾名思义就是快速的求一个数的n次幂.例如:an,直接的算法就是累乘,这样的计算方法时间复杂度为O(n).而快速幂可以降低时间复杂度至O(log(n)). 那么快速幂是如何降低时间复杂度 ...

最新文章

  1. 百度编辑器修改,不让它自动替换html标签
  2. SQLite Expert Pro中文版
  3. 在Linux下安装aws命令行操作
  4. 安装Linux后的遗留问题
  5. 3-7 DNA序列(DNA Consensus String, ACM/ICPC Seoul 2006, UVa1368)
  6. 怎样成为一名高手观后感
  7. Idea配置sbt(window环境)
  8. 大数据各子项目的环境搭建之建立与删除软连接(博主推荐)
  9. HDU 5273 Dylans loves sequence【 树状数组 】
  10. ListView列表项View复用--ViewHolder模式
  11. 估值模型不适用_十年十倍!绝对估值法是如何引领巴菲特买入可口可乐的?
  12. 10个国外免费下载电子书网站
  13. CAS单点登录【1】-理论(cas架构、https、SSL、TLS、非对称加密、证书、CA、握手)、OpenSSL、cas(认证、指定加密策略)
  14. 快读快写模板【附O2优化】
  15. Java反射05 : 修饰符Modifier静态方法学习示例
  16. java实现xls转换为xlsx
  17. sql服务器状态已停止,SQL SERVER 2008 SSMS - SQL Server Management Studio 已停止工作
  18. to tell 和to ask的用法
  19. Visual C++ 运行窗口一闪而过的解决方法
  20. 拿到外企offer了!

热门文章

  1. 边缘独立(marginal independent)的理解及举例
  2. Trick(十三)—— 数学与函数
  3. 机器学习基础(二十二)—— decision tree
  4. 如何通过投掷一枚硬币产生各种概率
  5. 计算机与计算机视觉史话
  6. 机器学习常用数学公式
  7. idea怎么提交到dev分支_idea中新建git分支,并提交到远程github
  8. python画简便的图-python的pyecharts绘制各种图表详细(附代码)
  9. python3.5安装步骤-win7安装python3.5
  10. python有什么用-python有什么用处?