NKOJ1236 a^b (数论定理的应用)

Posted 太子丶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NKOJ1236 a^b (数论定理的应用)相关的知识,希望对你有一定的参考价值。

                                                                          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的余数
证明:
s = a1a2...an = a1*10^(n-1)+a2*10^(n-1)+...+an
              = a1*(999..9+1)+a2*(999..9+1)+...+an
              =(a1*999..9+a2*999..9+...+a(n-1)*9)+(a1+a2+...+an) 
因为:
    (a1*999..9+a2*999..9+...+a(n-1)*9)%9 = 0;

所以:
    s%9=(a1+a2+...+an)%9;
 

代码如下:

 1 #include <stdio.h>
 2 #include <iostream>
 3 using namespace std;
 4 int power(int a,int b)    // 快速幂求余
 5 {
 6     a %=9;
 7     int ans = 1;
 8     while(b>0)
 9     {
10         if(b%2==1)
11             ans=(ans*a)%9;
12         b=b/2;
13         a=(a*a)%9;
14     }
15     return  ans;
16 }
17 int main()
18 {
19     int a,b;
20     while(cin>>a>>b)
21     {
22         if(a==0&&b==0)
23             break;
24         int angs = power(a,b);
25         if(angs==0)
26             cout<<"9"<<endl;
27         else
28             cout<<angs<<endl;
29     }
30     return 0;
31 }

 

以上是关于NKOJ1236 a^b (数论定理的应用)的主要内容,如果未能解决你的问题,请参考以下文章

Pairs Forming LCM (LightOJ - 1236)简单数论质因数分解算术基本定理(未完成)

数论不定方程&&中国剩余定理

数论及其应用——同余式定理

LightOJ 1236 Pairs Forming LCM(算数基本定理)

理论: 数论:拓展欧几里得算法及其证明

数论的基本定理