ZJUT1002 数字游戏
2012-04-17 16:45
148 查看
Problem Address:http://acm.zjut.edu.cn/ShowProblem.aspx?ShowID=1002
【前言】
突然翻起了在ZJUT上没过的题。
时隔一年,这道一年前没有做出来、当时超时的题目,今天很轻松就A掉了。
【思路】
这道题主要是求一个数(<10^8)是否可以表示成X^K,且要求X最大。
当时的做法算是当时的我比较高明的,就是枚举该数根号以内的数,判断其能否满足要求。
但是超时了,这是毋庸置疑的。
现在的做法是:产生10^4以内的质数表,总共1229(没错吧?)。
从小开始枚举,假若这个数可以整除某个质数,那么直接跳出。
原因是若这个数满足要求,那么它必然只有一个质因子。(抓住这个性质)
然后判断这个数是否可以表示成当前质数的K次幂。
如果能,则需要多加一步合并,比如16,2^4=>4^2。
合并的过程就是如果指数整除2,则底数翻倍,指数降倍,直到指数不整除2。
【代码】
【前言】
突然翻起了在ZJUT上没过的题。
时隔一年,这道一年前没有做出来、当时超时的题目,今天很轻松就A掉了。
【思路】
这道题主要是求一个数(<10^8)是否可以表示成X^K,且要求X最大。
当时的做法算是当时的我比较高明的,就是枚举该数根号以内的数,判断其能否满足要求。
但是超时了,这是毋庸置疑的。
现在的做法是:产生10^4以内的质数表,总共1229(没错吧?)。
从小开始枚举,假若这个数可以整除某个质数,那么直接跳出。
原因是若这个数满足要求,那么它必然只有一个质因子。(抓住这个性质)
然后判断这个数是否可以表示成当前质数的K次幂。
如果能,则需要多加一步合并,比如16,2^4=>4^2。
合并的过程就是如果指数整除2,则底数翻倍,指数降倍,直到指数不整除2。
【代码】
#include <iostream> using namespace std; const int maxn = 10000; bool IsNotPrime[maxn]; int PrimeList[maxn]; int PrimeNum; void Prime_Linear()//从大牛那里抄过来的线性质数筛选 { int i, j; memset(IsNotPrime, 0, sizeof(IsNotPrime)); IsNotPrime[1] = 1; IsNotPrime[0] = 1; for (i = 4; i < maxn; i += 2) IsNotPrime[i] = 1; PrimeList[0] = 2; PrimeNum = 1; for (i = 3; i < maxn; i += 2) { if (!IsNotPrime[i]) { PrimeList[PrimeNum++] = i; } for (j = 0; j < PrimeNum && i * PrimeList[j] < maxn; j++) { IsNotPrime[i * PrimeList[j]] = 1; if (i % PrimeList[j] == 0) { break; } } } } int main() { int n; int i, x, y; Prime_Linear(); while(scanf("%d", &n)!=EOF) { if (n==0) break; for (i=0; i<PrimeNum && PrimeList[i]<=n; i++) { if (n%PrimeList[i]==0) break; } if (i<PrimeNum && PrimeList[i]<=n) { x = PrimeList[i]; y = 0; while(n) { if (n%x==0) { n /= x; y++; } else break; } if (n!=1 || y==1) puts("0 0"); else { while(y%2==0 && y>2) { x *= x; y /= 2; } printf("%d %d\n", x, y); } } else puts("0 0"); } return 0; }
相关文章推荐
- [ACM_ZJUT_1002]数字游戏
- JS数字抽奖游戏实现方法
- 数字哑谜和回文游戏
- 3月22日的课后作业,猜数字的游戏
- 猜数字游戏的实现
- 小游戏——给五名运动员排名、找凶手、模拟银行密码三次输入场景、猜数字游戏,猜大或者猜小直到猜正确
- 数字游戏
- 循环-20. 猜数字游戏(15)
- UVa 340 Master-Mind Hints(猜数字游戏的提示)
- 尝试为猜数字游戏写的GUI程序
- 算法笔记_179:历届试题 数字游戏(Java)
- 循环-20. 猜数字游戏(15)
- unity3d-游戏实战突出重围,第三天 绘制数字
- Nim Game:数字游戏
- 蓝桥杯 历届试题 数字游戏 数学
- 动态规划:数字游戏
- 解猜数字游戏的程序
- 湖南工业大学第一届ACM竞赛 数字游戏 字符串处理
- 蓝桥杯 历届试题 数字游戏
- iOS开发----Swift猜数字游戏.