LightOJ-1282 Leading and Trailing 模算数 快速幂 对数的用法
题目链接:https://cn.vjudge.net/problem/LightOJ-1282
题意
给出两个正整数n(2 ≤ n < 231), k(1 ≤ k ≤ 1e7)
计算n^k的前三位,末三位
思路
首先末三位很好算,这里就只需模算数+快速幂
然后考虑前三位的算法,这里主要问题是数据溢出(pow(n, k)计算不可行)
那么考虑把n换成浮点数,同时除掉10^m,再去pow(n, k)
我们可以通过$ 1\leq (\frac{n}{10m})k \leq 1000 $大概估计范围
但是这里主要有个问题,就是在n很小而k很大时m不好取,计算结果很可能是inf或者0
换一个方法,我们设 $ a\in Z, b\in R, b<1 $
那么必然有 $ nk==10{a+b} $ ,其中10a是一个控制位数的因子,而10b才是数字的主要信息
数字的前三位可以表示为 $ \lfloor 10^{b+2} \rfloor $
注意不要总以为出现精度问题手贱加个eps!
代码
写了两种快速幂,一种递归一种循环,原理都一样
#include <cstdio>
#include <cmath>
const double eps=1e-6;
int getPre(int n, int k){
// attention eps shouldn't appear!
double idx=(k*log10(n))-(int)(k*log10(n));//+2+eps;
return pow(10, idx)*100;
}
int getPost(int n, int k){
int num=n%1000, ans=1;
for (int i=0; 1<<i <=k; i++){
if (k & 1<<i) ans=(ans*(num%1000))%1000;
num=((long long)num*num)%1000;
}return ans;
}
int quikPow(int n, int k){
if (k==0) return 1;
if (k==1) return n%1000;
long long tmp=quikPow(n, k/2);
tmp=(tmp*tmp)%1000;
if (k%2) tmp=(tmp*n)%1000;
return tmp;
}
int main(void){
int T, n, k;
scanf("%d", &T);
for (int cnt=1; cnt<=T; cnt++){
scanf("%d %d", &n, &k);
int pre=getPre(n, k), post=getPost(n, k);
printf("Case %d: %03d %03d\n", cnt, pre, post);
}
return 0;
}
Time | Memory | Length | Lang | Submitted |
---|---|---|---|---|
None | 1328kB | 844 | C++ | 2018-05-16 08:09:54 |
LightOJ-1282 Leading and Trailing 模算数 快速幂 对数的用法的更多相关文章
- 1282 - Leading and Trailing ---LightOj1282(快速幂 + 数学)
http://lightoj.com/volume_showproblem.php?problem=1282 题目大意: 求n的k次方的前三位和后三位数然后输出 后三位是用快速幂做的,我刚开始还是不会 ...
- LightOJ 1282 Leading and Trailing (快数幂 + 数学)
http://lightoj.com/volume_showproblem.php?problem=1282 Leading and Trailing Time Limit:2000MS Me ...
- LightOJ - 1282 - Leading and Trailing(数学技巧,快速幂取余)
链接: https://vjudge.net/problem/LightOJ-1282 题意: You are given two integers: n and k, your task is to ...
- UVA 11029 || Lightoj 1282 Leading and Trailing 数学
Leading and Trailing You are given two integers: n and k, your task is to find the most significant ...
- LightOj 1282 Leading and Trailing
求n^k的前三位数字和后三位数字. 范围: n (2 ≤ n < 231) and k (1 ≤ k ≤ 107). 前三位: 设 n^k = x ---> lg(n^k)=lg(x) - ...
- LightOJ 1282 Leading and Trailing 数论
题目大意:求n^k的前三位数 和 后三位数. 题目思路:后三位数直接用快速幂取模就行了,前三位则有些小技巧: 对任意正数都有n=10^T(T可为小数),设T=x+y,则n=10^(x+y)=10^x* ...
- LightOJ 1282 Leading and Trailing (数学)
题意:求 n^k 的前三位和后三位. 析:后三位,很简单就是快速幂,然后取模1000,注意要补0不全的话,对于前三位,先取10的对数,然后整数部分就是10000....,不用要,只要小数部分就好,然后 ...
- LightOJ - 1282 Leading and Trailing (数论)
题意:求nk的前三位和后三位. 分析: 1.后三位快速幂取模,注意不足三位补前导零. 补前导零:假如nk为1234005,快速幂取模后,得到的数是5,因此输出要补前导零. 2.前三位: 令n=10a, ...
- 1282 - Leading and Trailing 求n^k的前三位和后三位。
1282 - Leading and Trailing You are given two integers: n and k, your task is to find the most signi ...
随机推荐
- (转载)Android之有效防止按钮多次重复点击的方法(必看篇)
为了防止测试妹子或者用户频繁点击某个按钮,导致程序在短时间内进行多次数据提交or数据处理,那到时候就比较坑了~ 那么如何有效避免这种情况的发生呢? 我的想法是,判断用户点击按钮间隔时间,如果间隔时间太 ...
- JS异步操作之promise发送短信验证码.html
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta cont ...
- LeetCode(10)Regular Expression Matching
题目如下: Python代码: # -*- coding:utf-8 -*- def ismatch(s,p): #先将dp[s+1][p+1]二维数组全置为False dp = [[False] * ...
- php截取字符串|php截取字符串前几位|php截取中文字符串
转 截取字符串专题:php截取字符串函数,php 字符串长度,php截取字符串前几位 PHP截取中文字符串(mb_substr)和获取中文 => http://www.q3060.com/lis ...
- Vue this.$router.push、replace、go的区别
1.this.$router.push 描述:跳转到不同的url,但这个方法会向history添加一个记录,点击后会返回到上一个页面 用法 //字符串 this.$router.push('home' ...
- 织梦(dedecms)循环调用多级子栏目如二级栏目下三级栏目
本文是关于织梦DedeCMS调用多级子栏目的,拿来分享下. 后台已经建好栏目,对于产品展示栏 栏目导航如下图所示: 复制代码 代码如下: {dede:channelartlist cacheid=' ...
- HDU-4370 '0 or 1' 最短路 要考虑连通性
题目链接:https://cn.vjudge.net/problem/HDU-4370 题意 给一个矩阵C(nn),要我们找到一个矩阵X(nn),满足以下条件: X_{12}+X_{13}+...X_ ...
- BZOJ 4472 [Jsoi2015]salesman(树形DP)
4472: [Jsoi2015]salesman Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 417 Solved: 192[Submit][St ...
- 魔兽争霸RPG游戏-军团战争-游戏经验总结
终于要写这篇了,上一篇是个意外. 2015年关注,一代鬼王Xun和GGL比赛.晚上11点之后,经常有水友赛.主播xun,会带着一帮小弟,玩一些游戏.比如魔兽争霸6v6,2v2,RPG游戏-军团战争,疯 ...
- 【codeforces 589G】Hiring
[题目链接]:http://codeforces.com/problemset/problem/589/G [题意] 有n个人; 每个人每天在开始工作之前,都需要di单位的准备时间,然后才能开始工作; ...