ACM复习(5)1076 K尾相等数
来源:互联网 发布:人力资源管理 知乎 编辑:程序博客网 时间:2024/06/01 19:33
Description
从键盘输入一个自然数K(99999999>K>1),若存在自然数M和N(M>N),使得K的M次方和K的N次方均大于或等于1000,
且它们的未尾三位数相等,则称M和N是一对“K尾相等数”。请编程序,输出K尾相等数中M+N最小值。
输入样例
2
输出样例
120
解题思路
因为1 < K < 99999999 所以K的次方可能是超范围的数,但题目只要求次方中的末尾三位相等。
可以得到下列运算过程:
在 K * K * K * K * K…的过程中每做完一个运算(即K * K)将结果 % 1000,保存余数并且用
余数继续K的次方运算。因为对1000取余数结果必定小于1000,所以余数乘上K也不会超范围,
并且对1000取余数的结果数最多只有1000个(0 - 999),所以只需1000次运算后必定出现
重复,即 K的M次方%1000 == K的N次方%1000
将1001个余数保存后遍历数组即可得到最小M+N
#include<stdio.h>int main(){ int num[1004][2], k, j, count = 1, i = 0, min = 10000; scanf("%d", &k); j = k; // K < 1000时先将K运算到大于1000 // count为当前K的次方数 while(j < 1000) { j *= k; count ++; } // 循环1001次,必定出现余数重复 while(i < 1002) { num[i][0] = j % 1000; num[i][1] = count ++; j = num[i][0] * k; i ++; } for(int w = 0; w < i - 1; w ++) { for(int e = w + 1; e < i; e ++) { if(num[w][0] == num[e][0]) min = min < num[w][1] + num[e][1] ? min : num[w][1] + num[e][1]; } } printf("%d\n", min); return 0;}
阅读全文
0 0
- ACM复习(5)1076 K尾相等数
- 【ACM】K尾相等数
- k尾相等数
- k尾相等数
- K尾相等数
- K尾相等数
- K尾相等数
- K尾相等数
- K尾相等数
- K尾相等数
- K尾相等数
- k尾相等数
- K尾相等数
- sdibt K尾相等数
- NYOJ - K尾相等数
- 2.1K尾相等数
- K尾相等数问题
- K尾相等数(NYOJ212)
- 【1508】袋子里有多少个球(一般情况)
- Android_TabHost
- unrecognized selector sent to instance
- centos 建立swap交换缓存区
- IIS部署问题
- ACM复习(5)1076 K尾相等数
- 事件绑定的多种形态解决多种形态的浏览器兼容性问题(以及attachEvent中this指向的改变)
- MySQL 添加注释(comment)
- MEMS振镜扫描的Lissajous图形Matlab仿真
- 字节 字符与编码
- Java类中static的使用
- 扩展ThreadPoolExecutor的一种办法
- 两层交换机上划分VLAN借三层交换机路由功能实现跨网段访问(Cisco Packer Tracer 模拟器)
- using matlab drawing line graph for latex