博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二分求幂/快速幂取模运算——root(N,k)
阅读量:6195 次
发布时间:2019-06-21

本文共 1278 字,大约阅读时间需要 4 分钟。

二分求幂

int getMi(int a,int b){    int ans = 1;    while (b != 0)    {        //当二进制位k位为1时,需要累乘a的2^k次方,然后用ans保存        if (b % 2 == 1)        {            ans *= a;        }        a *= a;        b /= 2;    }    return ans;}

快速幂取模运算

最终版算法:

int PowerMod(int a, int b, int c)  {    int ans = 1;    a = a % c;    while(b>0)    {      if(b % 2 = = 1)ans = (ans * a) % c;      b = b/2;      a = (a * a) % c;    }    return ans;  }

求Root(N,k)

题目描述
   
    N<k时,root(N,k) = N,否则,root(N,k) = root(N',k)。N'为N的k进制表示的各位数字之和。输入x,y,k,输出root(x^y,k)的值 (这里^为乘方,不是异或),2=<k<=16,0<x,y<2000000000,有一半的测试点里 x^y 会溢出int的范围(>=2000000000) 
输入描述
   
   每组测试数据包括一行,x(0<x<2000000000), y(0<y<2000000000), k(2<=k<=16)
输出描述   
 
 输入可能有多组数据,对于每一组数据,root(x^y, k)的值 输入
4 4 10 输出
4

 代码:

#include 
#include
#include
#include
//root(x*y,k) = root(root(x,k)*root(y,k),k)int Root(int N,int k){ if(N
0){ if(y%2){
//y为奇数 ans = Root(ans*num, k); } y /= 2; num = Root(num*num, k); } return ans;}int main(){ int x,y,k; while(~scanf("%d %d %d",&x,&y,&k)){
printf("%d\n",getAns(x,y,k)); } return 0;}

 

转载于:https://www.cnblogs.com/farewell-farewell/p/9111649.html

你可能感兴趣的文章
前端同学大福利,最全的面试题目整理
查看>>
洛谷P3674 小清新人渣的本愿
查看>>
c命令行参数
查看>>
springboot 项目mybatis plus 设置 jdbcTypeForNull (oracle数据库需配置JdbcType.NULL, 默认是Other)...
查看>>
VIM Commands
查看>>
man syslog | col -b > syslog.txt
查看>>
Xcode 7中http通信出现如下错误
查看>>
Loj #2983. 「WC2019」数树
查看>>
Array types are now written with the brackets around the element type
查看>>
事件绑定的几种常见方式
查看>>
数据库设计-主键的设计
查看>>
JSPatch
查看>>
I.MX6 简单电路模拟USB设备的插入
查看>>
js 日期计算
查看>>
window对象的方法属性
查看>>
Css布局系列-经典三列布局
查看>>
windows下多线程类CThread
查看>>
clean code meaningful names
查看>>
scheme 学习:pair 和 list
查看>>
安装Selenium2Library步骤以及加载Selenium2Library时为红色
查看>>