NOIP200504循环
2016-05-22 20:58
344 查看
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位都相同。
显而易见,高精度乘法。来几次幂就行了。
View Code
乐乐是一个聪明而又勤奋好学的孩子。他总喜欢探求事物的规律。一天,他突然对数的正整数次幂产生了兴趣。众所周知,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。 |
#include<iostream> using namespace std; char s[200]; int k,ans[110]; void x(int a[],int b[],int b1,int c[],int c1) { int i,j; for(i=0;i<c1;i++) c[i]=0; if(b1>c1) b1=c1; for(i=0;i<b1;i++) { if(b[i]) for(j=0;j<c1-i;j++) { c[i+j]=a[j]*b[i]+c[i+j]; c[i+j+1]=c[i+j+1]+c[j+i]/10; c[i+j]=c[i+j]%10; } } } int a[110],b[110],c[110],d[110],i,j,num,n,p; int main() { cin>>s>>k; n=strlen(s); for(i=0;i<n;i++) a[n-i-1]=s[i]-'0'; for(i=0;i<k;i++) d[i]=a[i]; ans[0]=1; for(i=0;i<k;i++) { for(j=0;j<=i;j++) b[j]=d[j]; p=b[i]; num=0; do { x(a,b,i+1,c,i+1); num++; for(n=0;n<k;n++) b =c ; } while((num<10)&&(b[i]!=p)); if(b[i]!=p) { cout<<-1<<endl; return 0; } for(j=0;j<k;j++) b[j]=a[j]; for(j=0;j<num-1;j++) { x(a,b,k,c,k); for(n=0;n<110;n++) a =c ; } x(ans,&num,1,c,110); for(n=0;n<110;n++) ans =c ; } for(i=110-1;ans[i]==0;i--); for(;i>=0;i--) cout<<ans[i]; }
View Code
相关文章推荐
- JSP学习笔记(3)-JSP内置对象
- 第10.11-补充2-2
- 【Leetcode】Course Schedule
- 【Leetcode】Minimum Height Trees
- HDU 1242 Rescue (BFS+优先队列)
- java 多线程总结
- 性能优化总结
- 【Leetcode】Reconstruct Itinerary
- 设计模式与代码重构——ios篇
- Markdown编辑器基本语法
- Unity 简单读取txt文档内容的方法
- 8-CSS选择器
- [HDU1588]Gauss Fibonacci(递推+矩阵快速幂)
- POJ 2159 Ancient Cipher(密码变换)
- 【Leetcode】Ugly Number II
- numpy基础
- Swift 协议详解
- 【Leetcode】Super Ugly Number
- 【算法】——插入排序
- 新一代和12-factors:配置