uva 1521 - GCD Guessing Game(贪心)
来源:互联网 发布:企业网络管理培训 编辑:程序博客网 时间:2024/06/05 16:51
题目链接:uva 1521 - GCD Guessing Game
题目大意:给定一个数N,现在又一个数x,在1~N之间,现在每次可以猜一个数a,返回gcd(x,a),问说最少猜几次可以确定x。
解题思路:其实就将1~N里面的素数都要考虑一遍,因为有一个N的限制,所以每次选出来的素数的积不大于N即可。因为最坏情况为所有素数都不包含,即都要猜一遍;否则若存在素数因子x,那么下次选择素数的范围即变为2~N/x之间,代价肯定更小。
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int maxn = 10000;int N, v[maxn];int npri, vis[maxn+5], prime[maxn+5];void prime_table (int n) { npri = 0; for (int i = 2; i <= n; i++) { if (vis[i]) continue; prime[npri++] = i; for (int j = i * i; j <= n; j += i) vis[j] = 1; }}void set (int u, int x) { for (int i = x; i >= 0; i--) { int k = prime[i]; if (v[k] || k > u) continue; v[k] = 1; set(u/k, i-1); return; }}int solve () { int ans = 0; memset(v, 0, sizeof(v)); for (int i = npri-1; i >= 0; i--) { int u = prime[i]; if (v[u] || u > N) continue; ans++; v[u] = 1; set(N/u, i-1); } return ans;}int main () { prime_table(maxn); while (scanf("%d", &N) == 1) { printf("%d\n", solve()); } return 0;}
2 0
- uva 1521 - GCD Guessing Game(贪心)
- UVA 1521 - GCD Guessing Game(数论+贪心)
- UVA 题目1521 GCD Guessing Game(数论+贪心)
- 【贪心】【poj 4028】GCD Guessing Game
- UVa 10530 - Guessing Game
- BZOJ2632: [neerc2011]Gcd guessing game
- BZOJ2632: [neerc2011]Gcd guessing game
- BZOJ2632 [neerc2011]Gcd guessing game
- bzoj2632: [neerc2011]Gcd guessing game
- LA 5916(GCD Guessing Game-质数分组)
- Guessing Game
- Guessing Game
- Guessing Game
- Guessing Game
- poj 2328 Guessing Game
- POJ 2328 Guessing Game
- poj2328 Guessing Game
- Guessing Game (P2328)
- 算法导论最后一章《近似算法》习题“装箱”问题求解
- Android学习之路
- CentOS 6.3更新源(163的)
- JSP中errorPage无法跳转的解决办法
- PHP引用操作以及外部操作函数的局部静态变量的方法
- uva 1521 - GCD Guessing Game(贪心)
- s5pv210 芯片 tiny210 板 网卡启动流程
- cocos2d-x3.1.1 step by step 学习笔记6 Sprite精灵类
- 黑马程序员_IO
- HDU 4393 Throw nails (暴力加排序)
- POJ3624_Charm Bracelet(背包/01背包)
- rt5350 sn9c291 ov9712 录像H264
- 详解FindBugs的各项检测器
- OC (七)