快速幂——while理解

\[a^k
\]

把k转成2进制

\[k=2^n*p[n]+2^(n-1)*p[n-1]+...+2^1*p[1]+2^0*p[0]
\]

\[a^k=a^(2^n*p[n]+2^(n-1)*p[n-1]+...+2^1*p[1]+2^0+p[0])
\]

\[a^k=a^(2^0*p[0])*a^(2^1*p[1])*a^(2^2*p[2])*...*a^(2^n*p[n])
\]

\[a^k=a^2^0^p[0]*a^2^1^p[1]*a^2^2^p[2]*...*a^2^n^p[n]
\]

p[0...n]不是一就是零

一开始a=a,若p[0]=1,ans就乘a

接着循环,a=a2,若p[1]=1,ans就乘a2

以此类推

直到第n项

	int a;
int ans = 1;
while(k)
{
if(k % 2 == 1) ans *=a;
k /= 2;
a *= a;
}

转圈游戏

裸快速幂

#include <cmath>
#include <cstdio>
#include <string>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm> using namespace std; int a, n, m, x, k;
long long mi; int QR()
{
char c;
int sign = 1;
c = getchar();
while (c < '0' ||c > '9'){
if(c == '-')
sign = -1;
c = getchar();
}
int res = 0;
while(c <= '9' &&c >= '0'){
res *= 10;
res += c - '0';
c = getchar();
}
res *= sign;
return res;
} int main()
{
n=QR();
m=QR();
k=QR();
x=QR();
a = 10;
mi = 1;
while(k)
{
if(k % 2 == 1) mi *=a;
k /= 2;
a *= a;
a %= n;
mi %= n; //必须随时取模,不然超ll
}
mi *= m;
mi += x;
mi %= n;
printf("%lld",mi);
return 0;
}

最新文章

  1. Jsp的九个内置对象
  2. Add project to working sets
  3. JavaScript根据CSS的Media Queries来判断浏览设备的方法
  4. openstack kilo 流量
  5. c++笔试题两道,求解当中一道
  6. jvisualvm 使用
  7. 【JMeter】JMeter在linux下运行
  8. javascript二维数组
  9. JZ2440开发笔记(2)——minicom的安装和配置使用【转】
  10. linux源码“.config”文件分析
  11. shiro不重启动态加载权限
  12. Animation-list,帧动画+属性动画,做出Flash般的效果
  13. 利用Python中的mock库对Python代码进行模拟测试
  14. Python Numpy shape 基础用法(转自他人的博客,如涉及到侵权,请联系我)
  15. L - The Shortest Path Gym - 101498L (dfs式spfa判断负环)
  16. easyui tree 默认选中第一个元素
  17. python零散补充与总结
  18. CSS3性能体验
  19. 【Vue】浅谈Vue不同场景下组件间的数据交流
  20. Easy-UI开发总结

热门文章

  1. BFS小记
  2. iOS-UITableView HeaderView随Cell一起移动
  3. c++ beep 演奏一次质量不高的天空之城
  4. Java类成员之属性
  5. Scala实践4
  6. Git高级之配置多个SSH key
  7. MySQL8.0.19安装
  8. Android布局属性与常用控件
  9. 图像矫正技术深入探讨(opencv)
  10. Python学习,第五课 - 列表、字典、元组操作