K尾相等数问题
来源:互联网 发布:淘宝直通车打击同行 编辑:程序博客网 时间:2024/05/22 16:55
K尾相等数问题
描述
一个自然数K(2≤K),若存在自然数M和N(M大于N),使得K^M和K^N均大于或等于1000,且它们的末尾三位数相等,则称M和N是一对“K尾相等数”。
输入
输入包含若干个测试用例,每个测试用例占一行,为一个自然数K。
输出
对每个测试用例,用一行输出符合要求的最小M+N值。
样例输入
2
样例输出
120
一些测试用例可供参考:
2 120
3 114
4 60
5 12
6 33
7 28
8 108
9 58
10 7
思路来之与这位大神:
http://blog.csdn.net/virtualxmars/article/details/2422836
思路其实就是几个原理,一个是标记,一个是可能的情况。
标识指的就是重复计数原理。
可能的情况指的是就是抽屉原理。
意思就是,我们可以把满足要求的每一种情况都标记起来,而情况的多少就是抽屉原理,他要找的是后三位的比较,那样的话我们可以把所有的情况全存起来。用一个一维数组就可以了。
满足情况的事件总共是,1000种,0~999。我们用一个一维数组存起来。(初始化尤为重要!)
代码如下:
#include<iostream>#include<cstdio>#include<cstring>using namespace std;int a[1000]; int ans(int k){ memset(a,0,sizeof(a)); bool cmp = false; if(k>=1000) { cmp = true; k=k%1000; } int p = 1; for(int i=1;i<=1000;i++){ p *= k; if(cmp || p>=1000){ p = p%1000; if(a[p]==0){ a[p] = i; } else { return i+a[p]; } } } }int main(){ int k; while(scanf("%d",&k)!=EOF){ printf("%d\n",ans(k)); } return 0;}
阅读全文
0 0
- K尾相等数问题
- K尾相等数问题
- k尾相等数
- k尾相等数
- K尾相等数
- K尾相等数
- K尾相等数
- K尾相等数
- K尾相等数
- K尾相等数
- K尾相等数
- k尾相等数
- K尾相等数
- sdibt K尾相等数
- NYOJ - K尾相等数
- 2.1K尾相等数
- K尾相等数(NYOJ212)
- 数论:k尾相等数
- herbinate访问数据库出错
- trie树
- java打印杨辉三角
- 算法导论程序33--动态顺序统计
- 远程linux服务器安装mysql
- K尾相等数问题
- python内置函数大全
- Redis缓存中的国际化(二)
- 236. Lowest Common Ancestor of a Binary Tree
- 【模板】拓扑序列 (模版题:XJOI P1064)
- 有状态的drawbale中嵌套shape
- LeetCode:169. Majority Element
- 2017年上海金马五校程序设计竞赛(网上资格赛)H : DHU Club Festival
- unity标准资源包FirstPersonController的分析