求一个数n次方后的末尾数(数论/快速幂)问题描述解题思路代码实现运行结果参考
时间:2022-05-08
本文章向大家介绍求一个数n次方后的末尾数(数论/快速幂)问题描述解题思路代码实现运行结果参考,主要内容包括问题描述、解题思路、代码实现、运行结果、参考、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
问题描述
hdu1061-Rightmost Digit hdu1097-A hard puzzle 这两个oj题目思路几乎一样,都是为了快速求出一个数n次方后的末尾数为都多少?
解题思路
1的所有次方都是1 0的所有次方都是0 5的所有次方都是5 6的所有次方都是6 2^1=2 2^2=4 2^3=8 2^4=6(四个一循环) 3^1=3 3^2=9 3^3=7 3^4=1(四个一循环) 7^1=7 7^2=9 7^3=3 7^4=1(四个一循环) 4^1=4 4^2=6(两个一循环) 8^1=8 8^2=4(两个一循环) 9^1=9 9^2=1(两个一循环)
代码实现
下面以hdu1097-A hard puzzle为例
- 代码1(自己写的傻乎乎)
#include<iostream>
using namespace std;
int main(){
int m,n,last;
while(cin>>m>>n){
last=m%10;
if(last==0||last==1||last==5||last==6){
cout<<last<<endl;
}else if(last==4){
if(n%2==1){
cout<<4<<endl;
}
if(n%2==0){
cout<<6<<endl;
}
}else if(last==9){
if(n%2==1){
cout<<9<<endl;
}
if(n%2==0){
cout<<1<<endl;
}
}else if(last==2){
if(n%4==1){
cout<<2<<endl;
}
if(n%4==2){
cout<<4<<endl;
}
if(n%4==3){
cout<<8<<endl;
}
if(n%4==0){
cout<<6<<endl;
}
}else if(last==3){
if(n%4==1){
cout<<3<<endl;
}
if(n%4==2){
cout<<9<<endl;
}
if(n%4==3){
cout<<7<<endl;
}
if(n%4==0){
cout<<1<<endl;
}
}else if(last==7){
if(n%4==1){
cout<<7<<endl;
}
if(n%4==2){
cout<<9<<endl;
}
if(n%4==3){
cout<<3<<endl;
}
if(n%4==0){
cout<<1<<endl;
}
}else if(last==8){
if(n%4==1){
cout<<8<<endl;
}
if(n%4==2){
cout<<4<<endl;
}
if(n%4==3){
cout<<2<<endl;
}
if(n%4==0){
cout<<6<<endl;
}
}
}
return 0;
}
- 代码2
#include <stdio.h>
#include <math.h>
int main() {
int a[10] = {1, 1, 4, 4, 2, 1, 1, 4, 4, 2};
int n, num, rmd, ans; // rmd = rightmost digit
scanf("%d", &n);
for (int i = 0; i < n; ++i) {
scanf("%d", &num);
rmd = num % 10;
ans = (int) pow(rmd, num % a[rmd] ? num % a[rmd] : a[rmd]);
printf("%dn", ans % 10);
}
}
- 代码3
#include<iostream>//1097
#include<algorithm>
using namespace std;
int main()
{ int a,b,c[4];
while(cin>>a>>b)
{
a=a%10;
c[0]=a;//一次方的末尾数
c[1]=(c[0]*a)%10;//二次方的末尾数
c[2]=(c[1]*a)%10;//三次方的末尾数
c[3]=(c[2]*a)%10;//四次方的末尾数
if(b%4==1)
cout<<c[0]<<endl;
if(b%4==2)
cout<<c[1]<<endl;
if(b%4==3)
cout<<c[2]<<endl;
if(b%4==0)
cout<<c[3]<<endl;
}
return 0;
}
运行结果
运行及结果
参考
ACM — Rightmost Digit A hard puzzle
- Docker+Jenkins持续集成环境(5): android构建与apk发布
- Docker+Jenkins持续集成环境(4):使用etcd+confd实现容器服务注册与发现
- 易企秀前端压缩源码分析与还原
- 关于 JS 拖拽功能的冲突问题及解决方法
- 使用 SVG 和 JS 创建一个由星形变心形的动画
- 如何使用 Bootstrap 搭建更合理的 HTML 结构
- Java遍历Map对象的四种方式
- java 线程public void run()中值如何返回
- Jackson与spring框架整合的坑
- spring shiro整合时自动注入的问题
- mybatis获取update的id
- 点击!AWD攻防解题技巧在此!
- Docker 基础技术之 Linux namespace 详解
- Centos6下使用yum安装MariaDB
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Linux初始化系统盘后重新挂载数据盘方法
- 在页面部分没有发现字符集声明,请增加该声明
- Linux使用Sudo委派权限
- linux实现定时备份mysql数据库的简单方法
- linux确认已经卸载数据盘并可以新建自定义镜像
- 在Linux中查看进程占用的端口号
- Linux里Makefile是什么?它是如何工作的?
- 详解Linux文件系统:ext4及更高版本
- Linux设置虚拟内存的教学与实战教程
- 详解Linux服务器状态、性能相关命令
- 【s3cmd】给s3cmd加点debug日志再编一个
- Linux获取当前脚本真实路径的方法
- 短视频商城源码,商城左侧菜单栏网页模板
- 谈一谈Linux系统重要的子目录问题
- Tensorflow 2.x Java api的maven包怎么找