您的位置:首页 > 其它

F a^b

2017-12-10 20:20 113 查看
对于任意两个正整数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

数论规律证明:

假设一个数的各位数字分别是a1,a2...an ,则
(a1a2...an)%9=(a1+a2+...+an)%9
证明:
令s=a1a2...an=a1*10^(n-1)+a2*10^(n-2)+...+an
=a1*(999..9+1)+a2*(99..9+1)+...+a(n-1)*(9+1)+an
=(a1*999..9+a2*999..9+...+a(n-1))+(a1+a2+...+an)
s%9=(a1+a2+...+an)%9


我是比赛时想到最后结果肯定只有一 位数,那莫只有9种可能,我就从9里找规律,但是上面的证明是赛后大佬们告诉我的。
这样我想大家应该懂了吧。
AC代码:


# include<cstdio>
#include<iostream>
#include<cmath>
using namespace std;
const double pi=acos(-1);
const double s=1000;
int main()
{
int a,b,k;
int i;
while(cin>>a>>b&&(a+b))
{
if(!a)
{
cout<<"0"<<endl;
continue;
}
if(!b)
{
cout<<"1"<<endl;
continue;
}
int ans=a;
int i=2;
while(i<=b)
{
ans*=a;
ans%=9;
i++;
}
if(ans==0)
ans=9;
printf("%d\n",ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数论