博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2991:2011 (数学)
阅读量:4993 次
发布时间:2019-06-12

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

【题目描述】

    已知长度最大为200位的正整数n,请求出2011^n的后四位。

【题目链接】

    http://noi.openjudge.cn/ch0204/2991/

【算法】

    一开始想的是把n转换成二进制,然后快速幂,但要用到高精度除法,很烦。容易发现2011的501次方mod10000后为2011,所以2011的n次方和2011的n%500次方膜10000同余,而n%500和n的后三位的数%500结果应该相同,然后快速幂结束。(注意:strlen()返回值是size_t无符号的整数,要转换成有符号)

【代码】

1 #include 
2 using namespace std; 3 int t,num,ans,b,i; 4 char a[210]; 5 int main() 6 { 7 scanf("%d",&t); 8 while(t--) { 9 num=0;10 ans=1;11 b=2011;12 scanf("%s",a);13 for(i=(int)strlen(a)-3;i<(int)strlen(a);i++) if(i>=0) num=num*10+a[i]-'0';14 num%=500;15 for(;num;num>>=1) {16 if(num&1) ans=(long long)ans*b%10000;17 b=(long long)b*b%10000;18 }19 printf("%d\n",ans);20 }21 }

 

转载于:https://www.cnblogs.com/Willendless/p/9357331.html

你可能感兴趣的文章
Windows Internals学习笔记(八)IO系统
查看>>
sql插件,SQLPrompt
查看>>
Objetive-C 属性和线程安全
查看>>
mybatis pagehelper实现分页
查看>>
很牛的javascript日期转换函数
查看>>
javascript格式化json显示
查看>>
Redis 在 SNS 类应用中的最佳实践有哪些?
查看>>
关于Unity 动画绘制原理
查看>>
django-xadmin后台开发
查看>>
Canvas链式操作
查看>>
学渣乱搞系列之网络流学习
查看>>
Acdream A - Unique Attack
查看>>
java遍历List的多种方法
查看>>
【投票】你心目中的Excel催化剂价值有多大(附主流国内外收费插件供参考)?...
查看>>
算法复习——半平面交(bzoj2618凸多边形)
查看>>
关于在Intellij Idea中使用JSTL标签库报错的问题
查看>>
如何用自己电脑做服务器,绑定域名建一个个人网站
查看>>
.ds_store是什么文件
查看>>
递归C++
查看>>
POJ 1751 Highways(最小生成树&Prim)题解
查看>>