循环

问题描述

乐乐是一个聪明而又勤奋好学的孩子。他总喜欢探求事物的规律。
一天,他突然对数的正整数次幂产生了兴趣。众所周知,2的正整数次幂最后一位数总是不断的在重复 2,4,8,6,2,4,8,6…
我们说 2的正整数次幂最后一位的循环长度是 4(实际上 4的倍数都可以说是循环长度,但我们只考虑最小的循环长度)。
类似的,其余的数字的正整数次幂最后一位数也有类似的循环现象:

这时乐乐的问题就出来了:是不是只有最后一位才有这样的循环呢?对于一个整数 n 的正整数次幂来说,它的后 k位是否会发生循环?如果循环的话,循环长度是多少呢? 
注意: 
1.如果 n的某个正整数次幂的位数不足 k,那么不足的高位看做是 0。
2.如果循环长度是 L,那么说明对于任意的正整数 a,n 的 a 次幂和 a+L 次幂的最后 k位都相同。
输入格式
输入文件只有一行,包含两个整数 n和 k,n 和 k 之间用一个空格隔开,表示要求 n 的正整数次幂的最后 k位的循环长度
输出格式
输出文件包括一行,这一行只包含一个整数,表示循环长度。
如果循环不存在,输出 −1。
数据范围
1≤n≤10100, 1≤k≤100
输入样例
8833828847284838929929 5
输出样例
2500

解析

考察低k位循环节的情况,可以从数学角度推出: 假设个位存在循环,且最小循环节长度为x,那么所有前k位的循环节长度一定是x的整数倍,如果存在的话。
如果低K位不存在循环,则k +1 位必然不存在循环。
如果前k+1位存在循环,则前k位必然存在循环。

算法: 高精度
数学推导
从个位向K位递推求解

#include <cstring>
#include <iostream>
#include <algorithm>using namespace std;
//循环节;奥数;数论
//高精度乘法
const int N = 107;
int m;
int nums[N], nk[N];void mul(int c[], int a[],int b[])
{static int temp[N];memset(temp,0, sizeof temp);for(int i = 0; i < m; i ++)for(int j = 0; j < m;j ++)if(i + j < m)temp[i + j] += a[i] * b[j];for(int i = 0, t=0;i < m; i ++){t += temp[i];temp[i] = t % 10;t /= 10;} memcpy(c, temp, sizeof temp);
}void mul(int c[], int a[],int b)
{for(int i = 0, t= 0; i < m; i ++){t += a[i] * b;c[i] = t % 10;t /= 10;}
}int main()
{string str;cin >> str >> m;for(int i = 0, j = str.size() - 1; j>=0;i ++, j --)nums[i] = str[j] - '0';//逆序存放memcpy(nk, nums, sizeof nums);int xhj[N]  ={1}; //循环节长度,高精度存储int pn[N], p1[N];for(int k = 1;k <= m; k++)//递推m位{memcpy(pn, nums,sizeof pn);memset(p1, 0, sizeof p1);p1[0] = 1;//0000000000000000000001int r = 0;while(r <= 10){mul(pn,pn,nk);//快速迭代mul(p1,p1,nk);//算出nkr ++;if(pn[k-1]== nums[k -1]) break;//存在循环}memcpy(nk,p1, sizeof p1);//更新nkif(r > 10)//由抽屉原理,大于10则无解{memset(xhj,0,sizeof xhj);xhj[0] = -1;break;}mul(xhj,xhj,r);//循环节长度扩大r倍} int x = m;while(!xhj[x]) x --;while(x >= 0) cout << xhj[x --];return 0;
}

循环 noip2005相关推荐

  1. C++语言篇 字符串及字符数组练习

    01:统计数字字符个数 描述 输入一行字符,统计出其中数字字符的个数. 输入 一行字符串,总长度不超过255. 输出 输出为1行,输出字符串里面数字字符的个数. 样例输入 Peking Univers ...

  2. 中兴面试总结,华为。技术,市场

    1,软件测试,如何把这个测试做的更好. 进到一个新项目,作为测试人员应该都是想把测试做好,项目在符合客户质量要求的情况下按时交付的吧.但往往都事与愿违,造成这个结果的原因有很多很多.通过这段时间做自动 ...

  3. NOIP2005普及组第4题 循环

    NOIP2005普及组第4题 循环 时间限制: 1 Sec  内存限制: 128 MB 提交: 27  解决: 6 [提交][状态][讨论版][命题人:外部导入] 题目描述 乐乐是一个聪明而又勤奋好学 ...

  4. 信息学奥赛一本通 ybt 1933:【05NOIP普及组】循环 | 洛谷 P1050 [NOIP2005 普及组] 循环

    [题目链接] ybt 1933:[05NOIP普及组]循环 洛谷 P1050 [NOIP2005 普及组] 循环 [题目考点] 1.高精度 2.数学 [解题思路] 要求最后k位的循环长度,可以从低位向 ...

  5. Linux shell 学习笔记(9)— 循环语句(for、while)以及更改字段分隔符

    1. for 语句 bash shell 中 for 命令的基本格式如以下,$var 变量包含着这次迭代对应的当前列表项中的值. for var in list docommands done 也可以 ...

  6. 【机器学习】RNN循环神经网络

    循环神经网络归属: 领域:机器学习 方向:自然语言处理 贡献:自动文本生成 循环神经网络实际应用: 生活中因为原始数据都是序列化的,比如自然语言,语音处理,时间序列问题(股票价格)等问题, 这个时候需 ...

  7. MindSpore循环神经网络

    MindSpore循环神经网络 一. 神经网络的组成 神经元模型:首先简单的了解以下构成神经网络的最基础单元:神经元.每个神经元与其它神经元相连,处于激活状态时,就会向相连的神经元发送相应信号.从而改 ...

  8. 循环IRNNv2Layer实现

    循环IRNNv2Layer实现 IRNNv2Layer实现循环层,例如循环神经网络(RNN),门控循环单元(GRU)和长期短期记忆(LSTM).支持的类型为RNN,GRU和LSTM.它执行循环操作,该 ...

  9. CodeGen按钮循环

    CodeGen按钮循环 按钮循环是一个模板文件构造,它允许您迭代CodeGen拥有的按钮信息集合. 在按钮循环中处理的按钮的定义可以来自两个位置之一. 如果基于UI工具箱输入窗口定义进行处理,则默认情 ...

最新文章

  1. Connect(); // 2015 简要整理
  2. (011)XHTML文档之列表
  3. 注册表被黑客篡改 怎样修复_使用快速注册表黑客设置Office 2007配色方案
  4. Levmar:VS2015编译Levmar及Demo示例
  5. “秃如其来”的90后,造就了一个蒸蒸日上的产业
  6. javascript图片库威力增强版
  7. hibernate连接MySQL数据库
  8. 网页版Rstudio︱RStudio Server多人在线协作开发
  9. 桥本分数c语言,桥本分数式问题的C++算法
  10. shell脚本之批量删除文件
  11. 江苏2021高考成绩省内排名查询,2020年江苏高考成绩位次排名及一分一段表查询...
  12. 帝国列表页 pHP原代码页,帝国模板列表页和内容页的伪静态规则实现方法
  13. 为什么祖传代码会被称为「屎山」?
  14. 2021EI国际学术会议教给论文投稿小白们去投哪些靠谱的国际学术会议
  15. R语言绘图基础学习(一)
  16. 电子名片输出格式通用规范
  17. 在Linux中实现文本文件的复制_莫韵乐的小脚印笔记
  18. CC云直播 接口示例
  19. 【机器学习】基于天气数据集的XGBoost分类与预测
  20. html评论页面模板,评论:创意单页滚动HTML5模板

热门文章

  1. 华为服务器串号官网查询系统,串号去云端服务器查询
  2. 对称锥规划:锥与对称锥
  3. 企业邮箱的收费标准如何,企业邮箱的价格及怎么选择?
  4. 【对线面试】JVM全网最强面试对答
  5. l1l1llll1 php,齐博CMS splitword.php后门解密
  6. C# 基于开源MQTT自主接入阿里云IoT平台
  7. 2015德国红点奖获奖作品赏析
  8. 在机房如何利用极域反控制老师的电脑呢
  9. 人工神经网络算法实例代码,人工神经网络算法步骤
  10. 日语音频转文字怎么做?有什么软件分享的吗