Localhost8080

知行合一,自强不息

 

N^N的快速计算方法

这个题其实是数论里边一个小知识点。N^N的个位数其实就是(N%10)^N的个位数。不妨设为a = N%10,结果就是求a^N的个位了。
step1:   如果(N%2 == 0)那么结果就等于[(a*a)%10]^(N/2)
step2:   否则,结果就等于(a%10)*[(a*a)^(N/2)]的结果了。如果N<1,结束。否则返step1。
代码很简单:
#include<iostream>
using namespace std;
int judge(int n)
{
    
int k=n,a=n,b=1;
    a 
%= 10;
    
while(k > 1)
    {
        
if(k%2)
        {
            b 
*= a;
            b 
%= 10;
            
--k;
        }
        
else
        {
            a 
*= a;
            a 
%= 10;
            k 
/= 2;
        }
    }
    a 
*= b;
    a 
%= 10;
    
return a;
}
int main()
{
    
int T,n;
    cin
>>T;
    
while(T--)
    {
        cin
>>n;
        cout
<<judge(n)<<endl;
    }
    
return 0;
}

posted on 2010-10-09 23:55 superKiki 阅读(273) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理


导航

统计

常用链接

留言簿

随笔档案

文章分类

我的好友

一些常去的网站

搜索

最新评论

阅读排行榜

评论排行榜