博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LightOJ1282 - Leading and Trailing(快速幂+数学)
阅读量:4487 次
发布时间:2019-06-08

本文共 980 字,大约阅读时间需要 3 分钟。

题目链接:


题目大意:

nk的前3位数和后三位数。2a<231,1k107


解题过程:

只让求后三位的话我到是会,用快速幂就好了,但是求前三位感一脸懵逼。于是去翻了博客,发现居然还有这种操作!


题目分析:

后三位直接用快速幂取膜就好了,这里说一下前三位。

这里先假设:nk=a.bc...×10m,即用科学计数法表示,因为只要前三位,那么接下来就忽略掉后面的位。

对于上式两边同时取lgklgn=lga.bc+m

这里m一定为一个整数,a.bc在科学计数法中小于10,那么lga.bc一定为一个小于0的小数。

那么lga.bcklgn 的小数部分,mklgn的整数部分。

然后abc=10lga.bc×100,即为所求的前三位数。


AC代码:

#include 
using namespace std;typedef long long ll;const int mod = 1000;//快速幂+取模int pow_mod(int n, int m) { int ans = 1, x = n; while (m > 0) { if (m&1) { ans = (ll)ans * x % mod; } x = (ll) x * x % mod; m >>= 1; } return ans;}int main() { int T, n, m; cin >> T; for (int Case = 1; Case <= T; Case++) { cin >> n >> m; //计算前三位数 double t = log10(n) * m; t -= floor(t); int ans1 = pow(10, t)*100; int ans2 = pow_mod(n, m); printf("Case %d: %d %03d\n", Case, ans1, ans2); }}

转载于:https://www.cnblogs.com/ACMFish/p/7222812.html

你可能感兴趣的文章
C# 调Win32 API SendMessage简单用法及wMsg常量
查看>>
解决Python print输出不换行没空格的问题
查看>>
python使用内置方法和修饰器方法获取类名、函数名
查看>>
python 整数转字节 char
查看>>
基于EasyHook实现监控explorer资源管理器文件复制、删除、剪切等操作
查看>>
[Python]ctypes+struct实现类c的结构化数据串行处理
查看>>
Windbg使用
查看>>
GUID和UUID、CLSID、IID 区别及联系
查看>>
MFC ATL STL概要
查看>>
Hook基本知识
查看>>
Hook CreateProcess
查看>>
C#与C++之间类型的对应
查看>>
(C++C#类型互转工具)使用Signature Tool自动生成P/Invoke调用Windows API的C#函数声明...
查看>>
面试题
查看>>
Powershell + HTA
查看>>
IFG以太网帧间隙
查看>>
WINDOWS API 大全(一)
查看>>
Wmic
查看>>
WINDOWS API 大全(二)
查看>>
SetWindowsHookEx失败
查看>>