hdu 1163

别人的代码开始自己不知道什么数论解法:

        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;
}


posted @ 2014-05-20 09:46  HYDhyd  阅读(148)  评论(0)    收藏  举报