震惊! Rightmost Digit 快速幂解决

题目

Given a positive integer N, you should output the most right digit of N^N.

Input

The input contains several test cases. The first line of the input is a single integer T which is the number of test cases. T test cases follow.
Each test case contains a single positive integer N(1<=N<=1,000,000,000).

Output

For each test case, you should output the rightmost digit of N^N.

Sample Input

2
3
4
Sample Output
7
6

Hint

In the first case, 3 * 3 * 3 = 27, so the rightmost digit is 7.
In the second case, 4 * 4 * 4 * 4 = 256, so the rightmost digit is 6.

分析

1.快速幂
先看看怎么求a的a次方更快:
这里写图片描述

你看,只有指数对应的位为1,才相乘
而且每个乘的数都有规律,
假设a^2^0=c,a^2^1=c*c=c1,
a^2^2=c1*c1
那就用一个数存c,然后循环乘就行,
至于什么时候算在最终结果之内,只要看指数对应的位是否为一

int poww(int a,int b){int ans=1,base=a;while(b!=0){if(b&1!=0)ans*=base;base*=base;b>>=1;}return ans;
}

我解释不太清楚,看看别人怎么解释的吧

由于是二进制,很自然地想到用位运算这个强大的工具: & 和 >> ,&运算通常用于二进制取位操作,例如一个数 & 1 的结果就是取二进制的最末位。还可以判断奇偶x&1==0为偶,x&1==1为奇。>>运算比较单纯,二进制去掉最后一位

以b==11为例,b=>1011,二进制从右向左算,但乘出来的顺序是 a^(2^0) * a^(2^1) * a^(2^3),是从左向右的。我们不断的让base*=base目的即是累乘,以便随时对ans做出贡献。

  其中要理解base*=base这一步,看:::base*base==base^2,下一步再乘,就是base^2*base^2==base^4,然后同理 base^4 * base4 = base^8 ,,,,, see?是不是做到了base–>base^2–>base^4–>base^8–>base^16–>base^32…….指数正是 2^i 啊,再看上面的例子,a¹¹ = a^(2^0) * a^(2^1) * a^(2^3),这三项是不是完美解决了,,嗯,快速幂就是这样。

2.取模运算
定理:
(a*b)%c=(a%c)*(b%c)%c

于是,求最后n位

int quick(int a,int b,int c)  
{  int ans=1;   //记录结果  a=a%c;   //预处理,使得a处于c的数据范围之下  while(b!=0)  {  if(b&1) ans=(ans*a)%c;   //如果b的二进制位不是0,那么我们的结果是要参与运算的  b>>=1;    //二进制的移位操作,相当于每次除以2,用二进制看,就是我们不断的遍历b的二进制位  a=(a*a)%c;   //不断的加倍  }  return ans;  
}  

本题代码

#include<iostream>
using namespace std;int quick(int a,int b,int n)  
{  int ans =1;a=a%n;while(b!=0){if(b&1)ans=(ans*a)%n;a=a*a%n;b>>=1;} return ans;
}  
int main(){int n,a;cin>>n;while(n--){cin>>a;cout<<quick(a,a,10)<<endl;}
}

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

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

相关文章

rrpp协议如何修改_RRPP协议

产生背景在网络规划和实际组网应用中&#xff0c;大多采用环网来提供高可靠性。环网技术简单来说&#xff0c;就是将一些网络设备通过环的形状连接到一起&#xff0c;实现相互通信的一种技术。为了避免环网中产生广播风暴&#xff0c;最初采用了已被普遍应用的STP协议环路保护机…

android handler同步,android解决:使用多线程和Handler同步更新UI

如果运行时&#xff0c;可以看到滚动条由条慢慢变短&#xff0c;则说明程序成功了。截图如下&#xff0c;建议选择大点的文件做测试。main.xmlxmlns:android"http://schemas.android.com/apk/res/android"android:layout_height"wrap_content" android:id&…

hashmap hash冲突怎么解决_HashMap原理及冲突之简谈

了解HashMap原理对于日后的缓存机制多少有些认识。在网络中也有很多方面的帖子&#xff0c;但是很多都是轻描淡写&#xff0c;很少有把握的比较准确的信息&#xff0c;在这里试着不妨说解一二。对于HashMap主要以键值(key-value)的方式来体现&#xff0c;笼统的说就是采用key值…

html5把六张图片做成立方体,HTML5绘制在立方体上的几何曲线图形

CSS语言&#xff1a;CSSSCSS确定body {background: #222;width: 100vw;height: 100vh;overflow: hidden;-webkit-filter: blur(1px);filter: blur(1px);box-sizing: border-box;-webkit-perspective: 3000px;perspective: 3000px;}.cube {position: absolute;width: 250px;heig…

c语言中闰年 日期 天数 统计出在某个特定的年份中,出现了多少次既是13号又是星期五的情形

常识&#xff1a; 1、3、5、7、8、10、12月份&#xff0c;每个月31天。2月闰年有29天&#xff0c;非闰年28天其他月份&#xff0c;每月30天 闰年&#xff1a;一年有365天&#xff0c;闰年有366天&#xff0c;所谓闰年&#xff0c;即能被4整除且不能被100整除的年份&#xff0c…

java有啥区别 jsp_Java与JSP有什么区别

Java与JSP的区别有&#xff1a;1、Java是面向对象编程语言&#xff0c;而JSP是一个建立在Java基础上用于开发动态内容的web页面技术&#xff1b;2、Java负责逻辑业务处理&#xff0c;而JSP负责页面展现等等。【推荐课程&#xff1a;Java教程】JAVA是一种编程语言&#xff0c;可…

c++ stl 容器 迭代器 stl用法示例

1.基本概念 1.1容器概述 顺序容器 vector, deque,list关联容器 set, multiset, map, multimap容器适配器 stack, queue, priority_queue 1.1.1迭代器 用于指向顺序容器和关联容器中的元素迭代器用法和指针类似 有const 和非 const两种通过迭代器可以读取它指向的元素通过非…

python julian date_Python 的内嵌time模板翻译及说明

一、简介time模块提供各种操作时间的函数 说明&#xff1a;一般有两种表示时间的方式: 第一种是时间戳的方式(相对于1970.1.1 00:00:00以秒计算的偏移量),时间戳是惟一的 第二种以数组的形式表示即(struct_time),共有九个元素&#xff0c;分别表示&#xff0c;同一个时间戳的st…

html玫瑰花效果代码,html5渲染3D玫瑰花情人节礼物js特效代码

情人节马上就要到来了&#xff0c;这里给程序员前端设计师们献上一个&#xff0c;html5渲染而成的3D玫瑰花js效果&#xff0c;可以作为虚拟的情人节礼物送给自己的爱人。支持html5的浏览器查看。查看演示下载资源&#xff1a;16次 下载资源下载积分&#xff1a;20积分情人节玫瑰…

跳跃游戏(数组下标跳跃)

给定一个非负整数数组&#xff0c;假定你的初始位置为数组第一个下标。 数组中的每个元素代表你在那个位置能够跳跃的最大长度。 请确认你是否能够跳跃到数组的最后一个下标。 例如&#xff1a;A [2,3,1,1,4]A[2,3,1,1,4] 能够跳跃到最后一个下标&#xff0c;输出true&…

qc中的流程图怎么画_QC流程图参考

华北工控股份有限公司QC流程图样件试产量产文件编号:WI-MED-000FIC-G009版本:A0修改日期:客户:常规品机种:pcba适用工序&#xff1a;IQC/SMT/DIP/OQC/TEST/PACK审核:批准&#xff1a;检验方法检验频率记录担当负责人在制品完成品11确认型号、数量依送货单核对型号/数量仓库检查…

html 页面怎么加载富文本,UILabel加载html富文本

本文主要解决html标签之外文本属性设置当APP里面有搜索的需求的时候&#xff0c;产品可能会要求关键字显示特殊颜色或者字体。其中一种可能性是服务器返回的数据是带有html标签的字符串&#xff0c;那么该怎么解决&#xff1f;当标签之外的其他字体也需要设置不同格式&#xff…

python 打印皮卡丘_用python打印你的宠物小精灵吧

我们来通过一个有趣的例子开始编写我们的第一个python代码。本文涉及的python基础语法为&#xff1a;print输出函数&#xff0c;赋值&#xff0c;字符串print()print()是python的一个内置函数&#xff0c;用于打印输出&#xff0c;是最常见的一个函数之一。有些朋友可能对于打印…

最大子阵列

在一个数组中找出和最大的连续几个数。&#xff08;至少包含一个数&#xff09; 例如&#xff1a; 数组A[] [−2, 1, −3, 4, −1, 2, 1, −5, 4]&#xff0c;则连续的子序列[4,−1,2,1]有最大的和6. 输入格式 第一行输入一个不超过1000的整数n。 第二行输入n个整数A[i]。…

html嵌入原始数据,如何用html和javascript显示原始图像数据?

我有一个ajax应用程序,PHP端将来自摄像头的未编码的原始图像数据发送到客户端javascript端.我想使用img或canvas标签通过html和javascript显示图像.图像数据是32 * 32无符号字符.我想做,无论达到我的目标(编码或其他所有),但我想在客户端做,因为我无法处理服务器端的任何其他操…

三值排序

排序是一种很频繁的计算任务。一个实际的例子是&#xff0c;当我们给某项竞赛的优胜者按金银铜牌排序的时候。在这个任务中可能的值只有三种1&#xff0c;2和3。我们用交换的方法把他排成升序的。 写一个程序计算出&#xff0c;计算出的一个包括1、2、3三种值的数字序列&#…

imgaug批量椒盐噪声 python_python图像扩增-imgaug

# encodingutf-8import osimport imageioimport randomimport numpy as npimport imgaug as iaimport concurrent.futuresfrom imgaug import augmenters as iaaimport matplotlib.pyplot as pltfrom argparse import ArgumentParseria.seed(4)# %matplotlib inline# 参考 http…

express html文件接收路由参数,express 获取post 请求参数

在 Express 中没有内置获取表单 POST 请求体的 API , 我们需要添加第三方插件库安装:npm install --save body-parser配置:var bodyParser require(body-parser)//配置 body-parser 中间件 (插件, 专门用来解析表单 POST 请求)// parse application/x-www-form-urlencodedapp.…

深度优先搜索重要模板

深度优先搜索(Depth-First-Search) 从起点出发&#xff0c;走过的点要做标记&#xff0c;发现有没走过的点&#xff0c;就随意挑一个往前走&#xff0c;走不 了就回退&#xff0c;此种路径搜索策略就称为“深度优先搜索”&#xff0c;简称“深搜”。 其实称为“远度优先搜索”…

360浏览器查看html文件在哪里,360浏览器8菜单栏怎么弄出来?如何查看网站源代码...

今天想查看一个页面的源代码&#xff0c;没想到这个页面竟然禁止了鼠标右键功能&#xff0c;所以无法通过鼠标右键选择“查看源代码”来查看。然后就想通过 360 浏览器的“查看源代码”按钮进行查看&#xff0c;没想到找了半天都找不到这个按钮&#xff0c;最后只能通过查看源代…