Lucky Number
来源:互联网 发布:coc狂暴升级数据 编辑:程序博客网 时间:2024/05/16 05:34
题目链接
- 题意:
输入一个n,求在多少个x进制下只含有3、4、5、6
(1<=n<=1e12) - 分析:
用的是比较常规的方式。对于n,最后一位必然是这四个数中的一个,可以枚举末位i,那么n-i,一定能被x进制整除,也就是说,可以找到n-i的所有因子,在这之中找到可能是答案的因子即可。
const int MAXN = 1100000;int prime[MAXN], tot;bool check[MAXN];void init(){ FE(i, 2, MAXN) { if (!check[i]) prime[tot++] = i; for (int j = 0; j < tot && i <= MAXN / prime[j]; j++) { check[i * prime[j]] = true; if (i % prime[j] == 0) break; } }}struct Fac{ LL val, num;} fac[200];int cnt;vector<LL> vt;int ok(LL t, LL i){ t /= i; while (t) { if (t % i != 3 && t % i != 4 && t % i != 5 && t % i != 6) break; t /= i; } if (!t) return 1; return 0;}int used;void dfs(int pos, LL val, LL n){ if (pos == cnt) { if (val > used && ok(n, val)) vt.push_back(val); return; } LL t = 1; FE(i, 0, fac[pos].num) { dfs(pos + 1, val * t, n); t *= fac[pos].val; }}int fun(LL n){ vt.clear(); cnt = 0; LL nn = n; for (int i = 0; i < tot && prime[i] <= n / prime[i]; i++) if (n % prime[i] == 0) { fac[cnt].val = prime[i]; fac[cnt].num = 0; while (n % prime[i] == 0) { n /= prime[i]; fac[cnt].num++; } cnt++; } if (n > 1) { fac[cnt].val = n; fac[cnt].num = 1; cnt++; } dfs(0, 1, nn); vt.erase(unique(all(vt)), vt.end()); REP(i, vt.size()) { debugI(vt[i]); } return vt.size();}int solve(LL n){ int ret = 0; for (used = 3; used <= 6; used++) ret += fun(n - used); return ret;}int main(){ init(); int T; RI(T); FE(kase, 1, T) { LL n; cin >> n; if (n < 3) printf("Case #%d: 0\n", kase); else if (n <= 6) printf("Case #%d: -1\n", kase); else printf("Case #%d: %d\n", kase, solve(n)); } return 0;}
1 0
- lucky number
- Lucky Number
- Lucky Number
- lucky number
- Lucky Number
- Lucky Number
- FOJ 2071 lucky number
- Lucky Number 2
- A. Nearly Lucky Number
- hdu 3346 Lucky Number
- HDU3346:Lucky Number
- A. Nearly Lucky Number
- 又见 Lucky Number
- hdu 3346 Lucky Number
- HDU 3346 Lucky Number
- HDU 4937 Lucky Number
- HDU 4937 Lucky Number
- HDOJ 4937 Lucky Number
- 01背包
- iOS 面试题(十二)
- hdu 4940 Destroy Transportation system(sap dfs)
- win7 下ffmpeg release 版本崩溃问题
- protocol Buffer
- Lucky Number
- Triangle --找三角形数组中最小的路径(重重重)
- oracle的mybatis批量插入(转)
- python regular expression basic
- java基础复习(3)
- const int *p,const * int p,int const *p
- 越狱开发相关
- ArcSDE:C#打开SDE数据库的几种方式总结
- 判断两个线段是否相交