快速幂和大数取模的简单运用(以SPOJ LASTDIG - The last digit为例)

news/2025/1/16 7:00:31/文章来源:https://www.cnblogs.com/ning0713/p/18518146

题目描述

  • 原文

Nestor was doing the work of his math class about three days but he is tired of make operations a lot and he should deliver his task tomorrow. His math’s teacher gives him two numbers a and b. The problem consist of finding the last digit of the potency of base a and index b. Help Nestor with his problem. You are given two integer numbers: the base a (0 <= a <= 20) and the index b (0 <= b <= 2,147,483,000), a and b both are not 0. You have to find the last digit of \(a^{b}\) .

  • 中文翻译

Nestor 在数学课上做了三天的作业,但他已经厌倦了大量的运算,明天就该完成任务了。数学老师给了他两个数字 a 和 b。问题是找出基数 a 和指数 b 的结果的最后一位数。请帮助 Nestor 解决这个问题。老师给了你两个整数:基数 a(0 <= a <= 20)和指数 b(0 <= b <= 2,147,483,000),a 和 b 都不为 0。您必须找出 \(a^{b}\) 的最后一位数。

Input

The first line of input contains an integer t, the number of test cases (t <= 30). t test cases follow. For each test case will appear a and b separated by space.
第一行输入包含一个整数 t,即测试用例数(t <= 30)。每个测试用例的 a 和 b 用空格隔开。

Output

For each test case output an integer per line representing the result.
每个测试用例每行输出一个整数,代表测试结果。

Example

Input Output
2
3 10
6 2
9
6

题解

一道快速幂&取余运算的模板题(笑-)。

快速幂

快速幂是一种能迅速把\(a^{b}\) 求出来的算法,可以降低时间复杂度,防止TLE。

这里主要用了二分和递归的思路,把底数进行二分。当指数为偶数时,底数进行相乘,将指数除以2;当指数为奇数的时候,提出来一项底数,用ans进行积累,然后再按照偶数的方法递归。

long long qpow(long a,long n)
{long long ans = 1;while(n){if (n % 2) ans *= a;//指数为奇数a = a * a;//底数平方n /= 2;//指数减半}return ans;
}

大数取模

  • 原理展示

#include <iostream>
typedef long long ll;
using namespace std;
#define endl '\n'
int main()
{ll base,power;cin >> base >> power;if (base == 0 && power == 0) break;ll res = 1;//执行power次循环,每次结果都乘一个base,即base的power次方for (ll i = 1;i <= power;i++){res = res * base;res = res % 10;}ll ans = res % 10;cout << ans << endl;return 0;
}

AC代码

#include <iostream>
typedef long long ll; 
#define endl '\n'
using namespace std;
int t; ll a,b;ll c;
ll qpow(ll a,ll n)
{ll ans = 1;while(n){if (n & 1) ans = ans * a % 10;//位运算a = a * a % 10;n >>= 1;//n >> 1可将原数减半,n >>= 1等价于n = n / 2}return ans;
}
void solve()
{cin>>a>>b;c=qpow(a,b);cout<<c<<endl;
}
int main()
{std::ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);//降低时间复杂度cin>>t;while(t--){solve();}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/824700.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从人员外包到测试工具、测试平台,提供全方位的测试解决方案~

随着学社的学员越来越多,影响力越来越大,不停有学员和企业问我们:能否提供人员外包服务?与此同时,企业对于外包人员的业务技能要求也越来越高,寻找一个稳定靠谱的供应商也成了很多学员所在公司的需求。对此,学社推出了专业的外包解决方案,有这方面的需求的学员和企业可…

Prometheus03 Prometheus服务发现, 各种exporter, 容器化监控, Federation联邦, VictoriaMetrics远程存储

6 服务发现 6.1 服务发现原理 6.2 文件服务发现#准备主机节点列表文件,可以支持yaml格式和json格式 #注意:此文件不建议就地编写生成,可能出现加载一部分的情况 cat targets/prometheus*.yaml - targets:- master1:9100labels:app: prometheus#修改prometheus配置文件自动加…

DRF

1.DRF组件 详细文档:见附件 1.1 Web应用模式 在开发web应用中,有两种应用模式: 1.前后端不分离【客户端看到的内容和所有页面效果都是由服务端提供出来的】2.前后端分离【把前端的界面效果(html,css,js分离到另一个服务端,Python服务端只需要返回数据即可)】 前端形成一…

css_repeating-linear-gradient

在不指定背景颜色渲染区间的情况下, repeating-linear-gradient与linear-gradient的没有区别<div class="test test1"></div> <div class="test test2"></div>.test {width: 150px;height: 150px;border: 1px solid #ccc;display:…

Vue组件化-插槽Slot

认识插槽Slot如何使用插槽slot?插槽的默认内容多个插槽的效果具名插槽的使用◼ 事实上,我们希望达到的效果是插槽对应的显示,这个时候我们就可以使用具名插槽:具名插槽顾名思义就是给插槽起一个名字,<slot> 元素有一个特殊的attribute:name;一个不带name 的sl…

柳凯的第二次作业

这个作业属于哪个课程 https://edu.cnblogs.com/campus/zjlg/rjjc/这个作业的目标 实现一个命令行文本计数统计程序。能正确统计导入的纯英文txt文本中的字符数,单词数,句子数。姓名-学号 柳凯-2022329301149码云地址:一、介绍本程序用于统计纯英文文本文件中的字符数、单词…

Linux服务器上报内存ecc错误怎么解决

​面对Linux服务器上报的内存ECC错误,可以按以下步骤进行处理:1.确认错误并收集相关信息;2.检查硬件和服务器日志;3.重新定位或替换内存模块;4.运行内存测试工具;5.更新硬件固件和操作系统。首先,我们需要确认错误并获取详细的故障描述。1.确认错误并收集相关信息 当服务…

Django-Ajax请求

1.Django-Ajax请求 1.2 介绍 客户端(浏览器)向服务端发起请求的形式:1.地址栏:GET 2.超链接标签:GET 3.form表单:GET或POST 4.Ajax(重要):GET或POST或PUT或DELETEAjax(Asynchronous Javascript And XML)翻译成中文就是“异步Javascript和XML”。即使用Javascript语言与…

ipv6使用上和ipv4有区别吗

IPv6与IPv4在使用上的主要区别包括:1.地址格式不同;2.地址空间更大;3.安全性增强;4.自动配置能力;5.数据包头部结构不同;6.路由选择优化;7.对多播和移动性的支持更好。IPv6的推出旨在解决IPv4地址耗尽问题,同时提高网络效率和安全性。IPv6的地址空间比IPv4大得多,提供…

IDEA 利用groovy脚本生成注释

介绍 本文主要介绍利用IDEA编辑器的活动模板,结合groovy脚本,生成注释模板。目前生成的注释主要适用于java和js文件 推荐此方式,可以根据需要定义groovy脚本,生成不同格式的注释操作点击 File >> Setting 找到 Edtor >> Live Temolates , 建议创建一个模板组…

TYPE-C PD浅谈(三)

由于TYPE-C两头都一样,没有方向性,所以在对接前并不会有电源输出,数据主从也尚未定义。在PD的规范内,针对装置对接,定义了三个电阻来进行对接的识别。 Rp:做为Provider需要在CC脚位上上拉一个Rp电阻。Rp电阻允许有三种阻值(pull high 5V时,10K/22K/56K),这三种阻值也同…

思考能力的提升从把复杂问题简单化开始

在生活中我们会遇到各种各样的问题。有些问题非常简单;有的却非常复杂,让人们无从下手去解决。 但有些看似复杂的问题,只要我们仔细去分析它们,拨开云雾,自然就会见到“青天”。这种分析方法,就是“化繁为简”的思考模式,也就是——简化思考法。当复杂的问题被简化之后,…