uva 11029 【快速幂】
来源:互联网 发布:扒一扒淘宝靠谱的代购 编辑:程序博客网 时间:2024/06/11 07:10
Description
You are given two integers: n and k, your task is to find the most significant three digits, and least significant three digits of nk.
Input
Input starts with an integer T (≤ 1000), denoting the number of test cases.
Each case starts with a line containing two integers: n (2 ≤ n < 231) and k (1 ≤ k ≤ 107).
Output
For each case, print the case number and the three leading digits (most significant) and three trailing digits (least significant). You can assume that the input is given such that nk contains at least six digits.
Sample Input
5
123456 1
123456 2
2 31
2 32
29 8751919
Sample Output
Case 1: 123 456
Case 2: 152 936
Case 3: 214 648
Case 4: 429 296
Case 5: 665 669
题意: 求解a^b 的前三位和后三位
解法: 对于后三位,快速幂取模1000即可;
前三位要具体进行分析。
n可以写成n=10^b,这个a是个小数
所以b=i+d,i是整数部分,d是数部分
则n=10^(i+d)=10^i * 10^d
这里很重要,10^i其实有什么用?i是整数,所以10^i一定是1000…………000,然后*10^d,d是一个小于1的小数(别忘了是b的小数部分)
所以决定n这个大数会出现什么数字的,是10^d,10^i只是给10^d起到往后移动小数点的作用
所以我们要知道10^d
另外我们知道0<=d<1,所以 10^0 <= 10^d < 10^1 即1<=10^d<10
这样只需要10^d*100然后取整数部分,就能得到一个3位整数,这3个数字正是我们要的答案
a=10^k , a^n=(10^k)^n=10^k*n=10^i * 10^d , 这里i是k*n的整数部分,d是k*n的小数部分
要得到k就使用库函数fmod即可 d=fmod(k*n , 1) , 返回k*n/1的余数,也就是小数部分
另外k=log10(a) , 写在一起就是 d=fmod( log10(a)*n , 1)
然后就是求 100*10^d=10^(d+2)
#include <stdio.h>#include <iostream>#include <string.h>#include <algorithm>#include <math.h>#include <ctype.h>#include <time.h>#include <queue>#include <iterator>using namespace std;long long quickpow(long long m, long long n, long long k)//快速幂{long long b = 1;while (n > 0){if (n & 1)b = (b*m) % k;n = n >> 1;m = (m*m) % k;}return b;}int t;long long a, b , ans1, ans2;int main(){int cases = 1;scanf("%d",&t);while (t--){scanf("%lld %lld",&a,&b);long long x = a % 1000;ans1 = (int)pow(10, 2 + fmod (b * log10(a*1.0) ,1 ));//求前三位ans2 = quickpow(x,b,1000);printf("Case %d: %03lld %03lld\n", cases++, ans1, ans2);}return 0;}
- uva 11029 【快速幂】
- UVA 11029 【快速幂】
- 快速幂 UVA
- 【素数 && 快速幂】UVA
- UVA 10689 矩阵快速幂 + 快速幂取模
- uva 10870(矩阵快速幂)
- uva 12470(矩阵快速幂)
- UVa 10006 快速幂运算
- uva 10698 矩阵快速幂
- 【矩阵快速幂】Recurrences UVA
- UVA 11551(矩阵快速幂)
- uva 11029 - Leading and Trailing(快速幂)
- UVA - 11029 Leading and Trailing 快速幂和fmod
- UVA 11029 Leading and Trailing (log10()函数+快速幂)
- UVA - 11029 - Leading and Trailing (快速幂+公式变形)
- UVA Leading and Trailing 11029【数学+快速幂】
- uva 10655 Contemplation! Algebra 矩阵快速幂
- UVA 10718 Bit Mask (快速幂 + 贪心)
- position的四个属性值
- An error was encountered while running(Domain=FBSOpenApplicationErrorDomain, Code=4)
- Tab 模块 总结
- hibernate的数据库连接dao类
- Unity3d 导出 xcode 项目 编译错误解决方案 xcode6 U3DScreenToNGUIScreen
- uva 11029 【快速幂】
- 自己写的Properties工具类
- POJ 1005: I Think I Need a Houseboat
- 安迪的第一个字典(set容器)
- ADO.NET 实体框架概述
- hdu 1115 Lifting the Stone 计算几何
- CoreData并发处理
- XHR的用法
- 深入了解android平台的jni---注册native函数