NKOJ1236 a^b
Posted woxiaosade
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NKOJ1236 a^b相关的知识,希望对你有一定的参考价值。
题目描述
对于任意两个正整数a,b(0<=a,b<10000)计算a^b各位数字的和的各位数字的和的各位数字的和的各位数字的和。
Input
输入有多组数据,每组只有一行,包含两个正整数a,b。最后一组a=0,b=0表示输入结束,不需要处理。
Output
对于每组输入数据,输出ab各位数字的和的各位数字的和的各位数字的和的各位数字的和。
Sample Input
2 3
5 7
0 0
Sample Output
8
5
数论定理
任何数除以9的余数等于各位数的和除以9的余数
证明:
n = A1A2A3...An = A1 * (10)^(n-1) + A2 * (10)^(n-2) + ... + An
= A1 *(999..99 + 1) + A2 * (999..9 + 1) +...+ An * (0 + 1)
=【A1 * (999..99) + ... + An-1 * (9)】+ (A1 + A2 +.....+An)
= x + y
x显然可以被9整出,因此 n % 9 == y % 9
#include <iostream> #include <cstdio> using namespace std; int QuickPow(int a, int n){ int ans = 1; while(n){ if(n&1) ans = (ans * a) % 9; n >>= 1; a *= a; } return ans; } int main(){ int a,n; while(cin>>a>>n){ if(a==0&&n==0) break; int ans = QuickPow(a,n); if(ans) cout<<ans<<endl; else cout<<"9"<<endl; } return 0; }
以上是关于NKOJ1236 a^b的主要内容,如果未能解决你的问题,请参考以下文章
1236 - Pairs Forming LCM -- LightOj1236 (LCM) 给你一个数n,让你求1到n之间的数(a,b && a<=b)两个数的最小公倍数等
NKOJ P3815 树上的询问 (LCA 倍增)(复习距离倍增)
LightOJ 1236 - Pairs Forming LCM(素因子分解)