这里是传送门
定义一种操作为:已知一个数字,对其各位数字反复求和,直到剩下的数是一位数不能求和为止。
例如:数字2345,第一次求和得到2 + 3 + 4 + 5 = 14,再对14的各位数字求和得到1 + 4 = 5,得到5将不再求和。
现在请你求出对ab进行该操作后,最终得到的数字是什么。
Input
对于每组数据:
第一行,包含两个数字a(0 <= a <= 2000000000)和b(1 <= b <= 2000000000)
Output
对于每组数据:
第一行,输出对ab进行操作后得到的数字是什么
Sample Input
2 3
5 4
Sample Output
8
4
分析:
结果范围是0~9
公式:
abcd % 9 = ( a + b + c + d)% 9
(a+b)%mod = (a%mod + b%mod)%mod
(a*b)%mod = (a%mod)*(b%mod)%mod
证明过程:
2、如何证明一个数的数根(digital root)就是它对9的余数?
#include<bits/stdc++.h>
using namespace std;
const int N = 105;
typedef long long ll;
int main ()
{
ll a, b;
while(scanf("%lld%lld", &a, &b) != EOF)
{
ll k = 1;
if(!a) printf("%d\n", 0);
else
{
while(b>=1)
{
if(b&1) k = ((a%9)*(k%9))%9;
a = (a%9)*(a%9)%9;
b/=2;
}
printf( "%d\n", k == 0 ? 9 : k);
}
}
return 0;
}