kuangbin 数论 E题
来源:互联网 发布:c语言成员变量 编辑:程序博客网 时间:2024/06/03 11:56
此题不会前三位 参考:http://blog.csdn.net/lxpaopao/article/details/45417489
题意:给你一个数n,让你求这个数的k次方的前三位和最后三位
思路:求最后的三位,可以通过直接取余得到;求前三位则需要一些数学知识对于给定的一个数n,它可以写成10^a,其中这个a为浮点数,则n^k=(10^a)^k=10^a*k=(10^x)*(10^y);其中x,y分别是a*k的整数部分和小数部分对于t=n^k这个数,它的位数由(10^x)决定,它的位数上的值则有(10^y)决定,因此我们要求t的前三位,只需要将10^y求出,在乘以100,就得到了它的前三位。
fmod(x,1)可以求出x的小数部分。
推导:
x=lg(n^k)--->k*lg(10^n)=a+b-->10^a*10^b=n^k-->a+b=klgn-->x=klogn
10^a整数位是n^k的位数,10^b小数位是n^k个位数上的值,我们求出小数位上的值,乘以100即可。
学习了一个函数
fmod(x,1)可以求出x的小数部分。
代码:
#include <bits/stdc++.h>using namespace std;const int mod=1000;int pow_mod(int a,int n){//取模,求后三位 if(n==1) return a%mod; long long t=pow_mod(a,n/2); long long ans=t*t%mod; if(n%2==1) ans=ans*a%mod; return ans;}int main(){ int T,k,n,kase=1; cin>>T; while(T--) { scanf("%d%d",&n,&k); int x = (int)pow(10.0,2.0+fmod(k*log10(1.0*n),1)); int y = pow_mod(n,k); printf("Case %d: %d %03d\n",kase++,x,y); } return 0;}
阅读全文
0 0
- kuangbin 数论 E题
- kuangbin 数论 A题
- kuangbin KMP E题
- kuangbin 数论基础 C题
- kuangbin 数论基础 M题
- LightOJ -kuangbin 数论
- kuangbin简单数论(上)
- kuangbin 数论 F
- kuangbin 数论基础 W
- kuangbin 简单搜索 E
- 数论基础(from -- kuangbin)
- CF 757E 数论
- Codeforces 776E 数论
- Codeforces 711E 数论
- codeforces 837E 数论
- Codeforces 893E 数论
- Codeforces 412E E-mail Addresses(数论)
- codeforces 446E E. Divisors(数论+暴力)
- 目前大数据在金融行业的应用主要体现在哪些方面?
- spring boot 打jar包
- 关于泛型介于返回值同static之间的意义
- 折半查找
- # hadoop入门第六篇-Hive实例
- kuangbin 数论 E题
- [Leetcode] 384. Shuffle an Array 解题报告
- mutex&chan
- 【POJ】3180
- 排序之交换排序:冒泡排序and快速排序
- 二进制到八进制的转换
- AVFoundation学习笔记(二):视频播放相关
- absolute和relative总结
- Add Two Numbers II问题及解法