博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷 1226 取余运算||快速幂
阅读量:4308 次
发布时间:2019-06-06

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

洛谷  取余运算||快速幂 1226

其实比起楼下的大佬们,我主要是多了些位运算和讲解。

想法一:

直接输出 pow(b,q)%k

嗯~~勇气可嘉,但是看一眼数据范围(长整型)就会意识到,这个方法也许一个点都过不了。

想法二:

while(q2--) ans=ans*b%k;

用代码说话吧(简单、粗暴、易懂),意想不到的是只有一个点没过。

快速幂

在每一次进行循环时,如果q为奇数,则b^q可以转为b^2的q/2次方乘以b。所以每一次进行b^2计算时,需要根据q是否为奇数决定是否在最终的结果上乘以b。

时间复杂度O(logn),完爆数据。

#include
using namespace std;long long b,b2,q,k,cur,ans=1;int main(){ scanf("%lld%lld%lld",&b,&q,&k); cur=q; b2=b; while(cur) { if(cur&1) ans=ans*b2%k; cur>>=1; b2=b2*b2%k; } printf("%lld^%lld mod %lld=%lld",b,q,k,ans%k); return 0;}

 

 

转载于:https://www.cnblogs.com/yanyiming10243247/p/9237900.html

你可能感兴趣的文章
我们一起做一个可以商用的springboot脚手架
查看>>
idea在搭建ssm框架时mybatis整合问题 无法找到mapper
查看>>
java设计基本原则----单一职责原则
查看>>
HashMap的实现
查看>>
互斥锁 synchronized分析
查看>>
java等待-通知机制 synchronized和waity()的使用实践
查看>>
win10 Docke安装mysql8.0
查看>>
docker 启动已经停止的容器
查看>>
order by 排序原理及性能优化
查看>>
Lock重入锁
查看>>
docker安装 rabbitMq
查看>>
git 常用命令 入门
查看>>
关闭selinx nginx无法使用代理
查看>>
shell 脚本部署项目
查看>>
spring cloud zuul网关上传大文件
查看>>
springboot+mybatis日志显示SQL
查看>>
工作流中文乱码问题解决
查看>>
maven打包本地依赖包
查看>>
spring boot jpa 实现拦截器
查看>>
jenkins + maven+ gitlab 自动化部署
查看>>