NOIP200504循环

NOIP200504循环

乐乐是一个聪明而又勤奋好学的孩子。他总喜欢探求事物的规律。一天,他突然对数的正整数次幂产生了兴趣。众所周知,2的正整数次幂最后一位数总是不断的在重复2,4,8,6,2,4,8,6……我们说2的正整数次幂最后一位的循环长度是4(实际上4的倍数都可以说是循环长度,但我们只考虑最小的循环长度)。类似的,其余的数字的正整数次幂最后一位数也有类似的循环现象:
    循环现象    循环              循环长度
    2            2、4、8、6       4
    3            3、9、7、1       4
    4            4、6             2
    5            5                1
    6            6                1
    7            7、9、3、1       4
    8            8、4、2、6       4
    9            9、1             2
    这时乐乐的问题就出来了:是不是只有最后一位才有这样的循环呢?对于一个整数n的正整数次幂来说,它的后k位是否会发生循环?如果循环的话,循环长度是多少呢?
注意:
    1.如果n的某个正整数次幂的位数不足k,那么不足的高位看做是0。
    2.如果循环长度是L,那么说明对于任意的正整数a,n的a次幂和a+L次幂的最后k位都相同。


输入

只有一行,包含两个整数n和k,n和k之间用一个空格隔开,表示要求n的正整数次幂的最后k位的循环长度。

输出

包括一行,这一行只包含一个整数,表示循环长度。如果循环不存在,输出-1。

输入示例

32 2

输出示例

4

其他说明

数据范围:1<=k<=100,1<=n<10^100。

显而易见,高精度乘法。来几次幂就行了。

 1 #include<iostream>
 2 using namespace std;
 3 char s[200];
 4 int k,ans[110];
 5 void x(int a[],int b[],int b1,int c[],int c1)
 6 {
 7    int i,j;
 8    for(i=0;i<c1;i++) c[i]=0;
 9    if(b1>c1) b1=c1;
10    for(i=0;i<b1;i++)
11    {
12        if(b[i])
13            for(j=0;j<c1-i;j++)
14            {
15                c[i+j]=a[j]*b[i]+c[i+j];
16                c[i+j+1]=c[i+j+1]+c[j+i]/10;
17                c[i+j]=c[i+j]%10;
18             }
19     }
20 }
21 int a[110],b[110],c[110],d[110],i,j,num,n,p;
22 int main()
23 {
24     cin>>s>>k;
25     n=strlen(s);
26     for(i=0;i<n;i++) a[n-i-1]=s[i]-‘0‘;
27     for(i=0;i<k;i++) d[i]=a[i];
28     ans[0]=1;
29     for(i=0;i<k;i++)
30     {
31          for(j=0;j<=i;j++) b[j]=d[j];
32          p=b[i];
33          num=0;
34          do
35          {
36               x(a,b,i+1,c,i+1);
37               num++;
38               for(n=0;n<k;n++) b[n]=c[n];
39          } while((num<10)&&(b[i]!=p));
40          if(b[i]!=p)
41          {
42             cout<<-1<<endl;
43             return 0;
44          }
45          for(j=0;j<k;j++) b[j]=a[j];
46          for(j=0;j<num-1;j++)
47          {
48              x(a,b,k,c,k);
49              for(n=0;n<110;n++) a[n]=c[n];
50          }
51          x(ans,&num,1,c,110);
52          for(n=0;n<110;n++) ans[n]=c[n];
53      }
54      for(i=110-1;ans[i]==0;i--);
55      for(;i>=0;i--) cout<<ans[i];
56 }

时间: 2024-10-28 05:40:13

NOIP200504循环的相关文章

微信小程序学习总结(2)------- 之for循环,绑定点击事件

最近公司有小程序的项目,本人有幸参与其中,一个项目做下来感觉受益匪浅,与大家做下分享,欢迎沟通交流互相学习. 先说一下此次项目本人体会较深的几个关键点:微信地图.用户静默授权.用户弹窗授权.微信充值等等. 言归正传,今天分享我遇到的关于wx:for循环绑定数据的一个tips:  1. 想必大家的都知道wx:for,如下就不用我啰嗦了: <view class="myNew" wx:for="{{list}}">{{item.title}}<view

条件、循环、函数定义、字符串操作练习

注意标准库的两种导入与使用方式,建议大家采用<库名>.<函数名>的方式. 对前面的代码进行优化,用for,while,if,def实现: 用循环画五角星 1 import turtle 2 3 turtle.fillcolor("red") 4 turtle.begin_fill() 5 for i in range(5): 6 turtle.forward(100) 7 turtle.right(144) 8 turtle.end_fill() 用循环画同心圆

C语言for循环的一些注意细节

在使用for循环接收处理数组的时候,有时候要回到数组的首位置.以前没有注意这个问题,以为循环变量置0就可以,实际不是这样的.先来看一下for循环的反汇编代码,如下: Unit1.cpp.595: for(int i=0;i<3;i++)   00402938 33C0             xor eax,eax   0040293A 8945F4           mov [ebp-0x0c],eax   Unit1.cpp.597: i = 0;   0040293D 33D2     

python基础之条件循环语句

前两篇说的是数据类型和数据运算,本篇来讲讲条件语句和循环语句. 0x00. 条件语句 条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块. 可以通过下图来简单了解条件语句的执行过程: Python interprets non-zero values as True. None and 0 are interpreted as False. Python 判断非0的值为 True, 而None和0被认为是 False.注意这里的True和False首字母大写,Py

JS循环

JS循环基础知识 [循环结构的执行步骤] 1,声明循环变量: 2,判断循环条件: 3,执行循环体操作: 4,更新循环变量: 然后,循环执行2-4,直到条件不成立时,跳出循环: while循环()中的表达式,运算结果可以是各种类型.但是最终都会转化为真假,转换规则同if结构: ①boolean:true为真,flase为假: ②string:空字符串为假,所有非空字符串为真: ③number:0为假,一切非0数字为真: ④null,undefined,NaN全为假: ⑤object:全为真: wh

shell脚本for循环

Shell循环:for 循环次数是固定的 ===================== Shell: for  变量名  [in  取值列表] do 循环体 done C语言: for((初值;条件;步长)) do 循环体 done ===================== Shell循环:while  until 循环次数不一定是固定的 可以固定 可以不固定 while语句: while  条件测试 do 循环体 done 功能:当条件测试成立(条件测试为真),执行循环体. =========

WordPress主循环(The Loop)函数have_posts(),the_post()详解

WordPress中调用文章标题是the_title();调用文章内容时用到the_content();调用文章的作者时用到the_author();等等这些函数,都需要在主循环中使用,下面就介绍一下如何用have_posts()和the_post()开始Wordpress文章中循环,并说明如何结束循环. 语法 1 <?php if (have_posts()) :  while (have_posts()) : the_post(); ?> 2 当找到文章时返回此语句 3 <?php 

python学习笔记二:if语句及循环语句,断点,模块,pyc

if语句 注意:语句块中的内容要强制缩进,否则出错.IndentationError,缩进错误 所有代码,如果是顶级的,必须顶格写,前面不能有空格 if - : - elif - : - else: - while语句 while -: - else: - for语句 for i in range(10)--i默认0,步长默认1,最大为9 for i in range (0,2,10)--从0开始,步长为2,最大为8 for  i   in range(-): - else: - break--

while与do while 区别 for循环的简介及break和continue的区别

do while 循环和while循环的区别   1.do while循环是先执行循环体,然后判断循环条件,如果为真,则执行下一步循环,否则终止循环:    while循环是先判断循环条件,如果条件为真则执行循环体:   2.do while循环条件后面必须有一个分号,这个分号表明循环结束. 1.for循环 for循环是更加简洁的循环语句,大部分情况下,for循环可以代替while循环.do-while循环. for循环的格式为: for( 初始语句  ; 执行条件  ; 增量 ) { 循环体