2014多校第七场1003 || HDU 4937 Lucky Number
2014-08-13 16:12
447 查看
题目链接
题意 : 给定一个十进制n,让你转化成某个进制的数,让这个数只包含3 4 5 6这些数字,这个进制就成为n的幸运数字,输出有多少幸运数字,例如19,5进制表示是34,所以5是19的一个幸运数。
思路 : 以下思路有这里提供
先考虑特殊情况,所情况下会有无穷个?只有n=3,4,5,6的时候,因为这几个数在大于n的进制下都是他本身。。注意特殊情况不包括33,343这些(我一开始就死在这里了,wa了三次)。因为33在34进制下就不是33了(类似于10在16进制下就是A了)。
我们知道n=a0+a1*x+a2*x^2+...,其中x为进制。由于n达到1e12,所以我们分情况讨论。
1)a0形式,我们已经在特殊情况中指出,只有无穷个的时候才会符合条件
2)a0+a1*x形式,枚举a0,a1,我们判断(n-a0)是否能被a1整除,以及x是否大于max(a0,a1)即可。
3)a0+a1*x+a2*x^2,我们枚举a0,a1,a2,那么就相当于解一元二次方程。判断是否有整数解,是否整数解x>max(a0,a1,a2)即可。
4)不在上述三种形式内的,那么进制x最大也不会x^3>n,不然就会变成上述三种的形式。我们就可以枚举进制然后判断是否为幸运进制了。由于x^3<=n,所以复杂度只有1e4。
View Code
题意 : 给定一个十进制n,让你转化成某个进制的数,让这个数只包含3 4 5 6这些数字,这个进制就成为n的幸运数字,输出有多少幸运数字,例如19,5进制表示是34,所以5是19的一个幸运数。
思路 : 以下思路有这里提供
先考虑特殊情况,所情况下会有无穷个?只有n=3,4,5,6的时候,因为这几个数在大于n的进制下都是他本身。。注意特殊情况不包括33,343这些(我一开始就死在这里了,wa了三次)。因为33在34进制下就不是33了(类似于10在16进制下就是A了)。
我们知道n=a0+a1*x+a2*x^2+...,其中x为进制。由于n达到1e12,所以我们分情况讨论。
1)a0形式,我们已经在特殊情况中指出,只有无穷个的时候才会符合条件
2)a0+a1*x形式,枚举a0,a1,我们判断(n-a0)是否能被a1整除,以及x是否大于max(a0,a1)即可。
3)a0+a1*x+a2*x^2,我们枚举a0,a1,a2,那么就相当于解一元二次方程。判断是否有整数解,是否整数解x>max(a0,a1,a2)即可。
4)不在上述三种形式内的,那么进制x最大也不会x^3>n,不然就会变成上述三种的形式。我们就可以枚举进制然后判断是否为幸运进制了。由于x^3<=n,所以复杂度只有1e4。
#include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #define LL __int64 using namespace std; int main() { int T, casee = 1; scanf("%d",&T); while(T--) { LL n; LL ans = 0,i,j,k; scanf("%I64d",&n); printf("Case #%d: ", casee++); if(n >= 3 && n <= 6) { printf("-1\n"); continue; } for( i = 3; i <= 6; i++) for(j = 3; j <= 6; j++) if((n - i) % j == 0 && (n - i) / j > max(i, j)) ans++; LL s ,a,b,c; for( i = 3; i <= 6; i++) { for(j = 3; j <= 6; j++) { for(k = 3; k <= 6; k++) { a = i,b = j,c = k - n; s = (LL)sqrt(b * b - 4 * a * c + 0.5); if(s * s != (b * b - 4 * a * c)) continue; if((s - b) % (2 * a)) continue; if((s - b) / (2 * a) > max(i, max(j, k))) ans++; } } } LL t; for(i = 4; i * i * i <= n; i++) { t = n; while(t) { if(t % i < 3 || t % i > 6) break; t = t / i; } if(!t) ans++; } printf("%I64d\n", ans); } return 0; }
View Code
相关文章推荐
- hdu 4937 Lucky Number 多校第七场
- hdu 4937 2014 Multi-University Training Contest 7 1003
- hdu 4937 Lucky Number 2014多校七 数论
- HDU 4937 Lucky Number(2014 Multi-University Training Contest 7)
- hdu 4937 Lucky Number 2014 Multi-University Training Contest 7
- hdu 4937 Lucky Number(数学题 进制转换)2014多校训练第7场
- HDU 4937 (杭电多校 #7 1003题)Lucky Number(瞎搞)
- 枚举 + 进制转换 --- hdu 4937 Lucky Number
- HDU-4937-Lucky Number
- hdu 4937 Lucky Number
- HDU 4937 Lucky Number 【搜索】
- HDU 4937 Lucky Number (数学,进制转换)
- 【HDU】4923 Room and Moor(2014多校第六场1003)
- hdu 4937 Lucky Number ( 进制转换+枚举 )
- hdu 4937 Lucky Number 数学(进制转换)
- hdu 4937 Lucky Number(数学:解方程)
- HDU 5371 (2015多校联合训练赛第七场1003)Hotaru's problem(manacher+二分/枚举)
- hdu 4937 Lucky Number 数学(进制转换)
- HDU 4937 Lucky Number
- HDU 5371 (2015多校联合训练赛第七场1003)Hotaru's problem(manacher+二分/枚举)