Rightmost Digit(简单数论_幂取模)
来源:互联网 发布:淘宝土楼万应膏怎么样 编辑:程序博客网 时间:2024/06/18 05:44
Rightmost DigitCrawling in process...Crawling failedTime Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u
Description
Given a positive integer N, you should output the most right digit of N^N.
Input
The input contains several test cases. The first line of the input is a single integer T which is the number of test cases. T test cases follow.
Each test case contains a single positive integer N(1<=N<=1,000,000,000).
Each test case contains a single positive integer N(1<=N<=1,000,000,000).
Output
For each test case, you should output the rightmost digit of N^N.
Sample Input
234
Sample Output
76
Hint
In the first case, 3 * 3 * 3 = 27, so the rightmost digit is 7.In the second case, 4 * 4 * 4 * 4 = 256, so the rightmost digit is 6.
题意:就是求n*n的个位数
思路:这是典型的幂取模的应用;
对于a^n%m来说 一般的做法是
int pow(int a,int n,int m)
{
int ans=1;
for(int i=0;i<n;i++)
ans=(int)((long long)ans*n%m);
}
时间复杂度为O(n),当n很大的时候速度就很不理想。下面这种算法就能很大的提高速度:
利用分治法
int pow_mod(int a,int n,int m){ int x=pow_mod(a,n/2,m); long long ans=(long long)x*x%m; if(n%2==1) ans=ans*a%m; return (int)ans;}例如a^29=(a^14)^2*a----->a^14=(a^7)^2----->a^7=(a^3)^2*a----->a^3=a^2*a;一共只做了七次乘法,近似二分查找,每次规模减少近一半,时间复杂度为O(log n);
#include <stdio.h>#include <string.h>#include <stdlib.h>#include <map>#include <string>#include <algorithm>#include <iostream>#include <queue>using namespace std;int pow_mod(int a,int n,int m){ int ans= 1; while (n > 0) { if (n%2==1) { ans=ans*a%m; } a*=a; a%=m; n/=2; } return ans;}int main(){ int T; int n,t; scanf("%d", &T); while(T--) { scanf("%d", &n); t=pow_mod(n%10,n,10); printf("%d\n", t); } return 0;}
0 0
- Rightmost Digit(简单数论_幂取模)
- Rightmost Digit 数论
- hdoj 1061 Rightmost Digit 【数论】
- HDU 1061 Rightmost Digit 数论
- Rightmost Digit 快速幂取模
- hdoj1061 Rightmost Digit(简单题)
- HDU1061-Rightmost Digit(快速幂取模)
- HDU1061:Rightmost Digit(快速幂取模)
- HDU1061-Rightmost Digit(快速幂取模)
- HDU1061 Rightmost Digit(快速幂取模)
- 【快速幂取模】HDU1061 Rightmost Digit
- HDU 1061.Rightmost Digit【数论及方法】【8月30】
- ACM_HDU 1060+1061 leftmost or rightmost digit(数论)
- Rightmost Digit
- Rightmost Digit
- Rightmost Digit
- Rightmost Digit
- Rightmost digit
- Android 下拉刷新控件的使用
- Myeclipse下切换svn用户
- 摸石头——Node.Js(五)
- 寻找发帖“水王”
- 1-13
- Rightmost Digit(简单数论_幂取模)
- memcache监控工具memadmin与memcache安全配置
- Storm专题一、Storm DRPC 分布式计算
- Spring+quartz 定时任务
- 『ANDROID』Android APIs 简介
- 1408060831-hd-开门人和关门人.cpp
- 摸石头——Node.Js(六)
- iBatis简单入门教程
- 创建 wordpress 插件