别人的代码开始自己不知道什么数论解法:
ab*ab=(a*10+b)(a*10+b)=a^2*100+2ab*10+b^2
所以the root digital=(a+b)*(a+b);
而数论中的定理:两数之积对9取余数等于两数对9的余数的乘积。
代码:
#include"stdio.h"
int main()
{
int i,n,sum;
while(scanf("%d",&n)!=EOF&&n!=0)
{
sum=1;
for(i=0;i<n;i++)
{
sum=sum*n%9;
}
if(sum==0)
printf("9\n");
else
printf("%d\n",sum);
}
return 0;
}
我的ac代码:
#include<stdio.h>
__int64 seach(__int64 u) {
__int64 sum=0;
while(u) {
sum=sum+u%10;
u/=10;
}
if(sum<10)
return sum;
return seach(sum);
}
__int64 dfs(__int64 n,__int64 index) {
if(index==1)
return n;
if(index==0)
return 1;
if(index%2==1)
return n*dfs(seach(n*n),index/2);
return dfs(seach(n*n),index/2);
}
int main() {
__int64 n,m,i,j,k;
while(scanf("%I64d",&n),n) {
printf("%I64d\n",seach(dfs(seach(n),n)));
}
return 0;
}