求一个数n次方后的末尾数(数论/快速幂)

求一个数n次方后的末尾数(数论/快速幂)

问题描述

hdu1061-Rightmost Digithdu1097-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

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<

}else if(last==4){

if(n%2==1){

cout<<4<

}

if(n%2==0){

cout<<6<

}

}else if(last==9){

if(n%2==1){

cout<<9<

}

if(n%2==0){

cout<<1<

}

}else if(last==2){

if(n%4==1){

cout<<2<

}

if(n%4==2){

cout<<4<

}

if(n%4==3){

cout<<8<

}

if(n%4==0){

cout<<6<

}

}else if(last==3){

if(n%4==1){

cout<<3<

}

if(n%4==2){

cout<<9<

}

if(n%4==3){

cout<<7<

}

if(n%4==0){

cout<<1<

}

}else if(last==7){

if(n%4==1){

cout<<7<

}

if(n%4==2){

cout<<9<

}

if(n%4==3){

cout<<3<

}

if(n%4==0){

cout<<1<

}

}else if(last==8){

if(n%4==1){

cout<<8<

}

if(n%4==2){

cout<<4<

}

if(n%4==3){

cout<<2<

}

if(n%4==0){

cout<<6<

}

}

}

return 0;

}

代码2

#include

#include

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("%d\n", ans % 10);

}

}

代码3

#include//1097

#include

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<

if(b%4==2)

cout<

if(b%4==3)

cout<

if(b%4==0)

cout<

}

return 0;

}

运行结果

运行及结果

参考

ACM — Rightmost DigitA hard puzzle

上一篇: 龙狼传下载
下一篇: 华为不行,为何台积电可以为小米芯片代工?

相关文章

电商运营工资待遇怎么样?揭秘行业内真实收入!
那个女孩的俘虏漫画,那个女孩的俘虏漫画全集,爱漫画就看那个女孩的俘虏漫画
蜗牛睡眠app使用图文教程
浙江杭州女足名单(中国女足队长吴海燕身高)
什么是液晶显示器?
问道宝宝飞升任务流程详细(宠物飞升作用详解)