博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
规律打表,找循环节,类似2016湘潭那个2016
阅读量:6114 次
发布时间:2019-06-21

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

2991:2011

总时间限制: 
1000ms
内存限制: 
65536kB
描述
已知长度最大为200位的正整数n,请求出2011^n的后四位。
输入
第一行为一个正整数k,代表有k组数据,k<=200接下来的k行,
每行都有一个正整数n,n的位数<=200
输出
每一个n的结果为一个整数占一行,若不足4位,去除高位多余的0
样例输入
3528792
样例输出
1051815521

思路:

2011的n次方,这个n很大,小于等于200位,一看就是字符串读入,因为只取最后四位,这时候要推测出题者用意,2011的次方后四位是否会出现一个循环节。

想起2016年湘潭赛那个2016,也是快速乘法,发现有循环节之后更加好做。

这里一样。预处理打表,注释部分,打出i的出现相同的a[i]下标,发现1 501 1001 1501。所以循环节是500.

因为只留最后4位,所以每次打表的时候取模10000,留下最后四位就好。

因为500一循环,只要最大三位数即可,没有三位的直接转换。

注意n的位数,一开始只开了25,发生玄学问题。。。。(25放全局可以过,250放局部可以过,RE)

#include 
using namespace std;const int maxn = 10000+5;int a[maxn] = {
0,2011};void pre(){ for(int i = 2; i <= 10000; i++) { a[i] = (a[i-1]*2011)%10000; }}int main(){ pre();// for(int i = 1; i <= 10000; i++) {// if(a[i]==2011) {// cout<
<
=3) {// for(int i = len-1,j = 0; i >= len-3; i--,j++) {// cout<<(pow(10,j))<

 

转载于:https://www.cnblogs.com/zhangmingzhao/p/7199365.html

你可能感兴趣的文章
Nologging到底何时才能生效?
查看>>
SoftEther ***
查看>>
我的友情链接
查看>>
activity以dialog形式显示
查看>>
用vcenter converter从vmwave workstation clone CentOS去ESXi 需更改网卡MAC
查看>>
防止刚进入activity的时候,edittext获取焦点,自动弹出软键盘
查看>>
【白话设计模式十一】生成器模式(Builder)
查看>>
exchange 2010 反垃圾邮件
查看>>
MySql-统计所有会员的最高前10次的积分和
查看>>
df du 磁盘分区 mkfs mount
查看>>
log4j配置详解与使用方法说明
查看>>
springmvc入门
查看>>
Android--------TabLayout实现新闻客户端顶部导航栏
查看>>
排毒,美容,什么时间最好。
查看>>
Exchange小技巧一则:部门、客服等专用邮箱
查看>>
Go 1.11 的go.mod
查看>>
关于sql性能一个小技巧
查看>>
linux一般的安全策略
查看>>
Java 软件开发 - 中级进阶
查看>>
php-fpm进程管理方式(static和dynamic)
查看>>