首页 > 代码库 > HDU 4937 Lucky Number 规律题_(:зゝ∠)_
HDU 4937 Lucky Number 规律题_(:зゝ∠)_
把所有合法的进制打出来会发现合法的进制都是在
n/3 n/4 n/5的边上
然后暴力边上的进制数。。
#include <cstdio> #include <set> typedef long long ll; bool ok(ll x, ll y) { ll v; while (x > 0) { v = x % y; if (v != 3 && v != 4 && v != 5 && v != 6) return false; x /= y; } return true; } std::set<ll> vis; int T = 0; ll n; void work() { scanf("%I64d", &n); printf("Case #%d: ", ++T); if (n == 3 || n == 4 || n == 5 || n == 6) puts("-1"); else { vis.clear(); int ans = 0; ll base; for (int i = 1; i <= 50 && i < n; ++i) { for (int j = 0; j <= 50; ++j) { base = n / i + j; if (base <= 1 || base >= n || vis.count(base) > 0) continue; vis.insert(base); if (ok(n, base)) ++ ans; } for (int j = 1; j <= 50; ++j) { base = n / i - j; if (base <= 1 || base >= n || vis.count(base) > 0) continue; vis.insert(base); if (ok(n, base)) ++ ans; } } for (int i = 2; i < n && i <= 1000; ++i) { if (vis.count(i)) continue; vis.insert(i); if (ok(n, i)) ++ ans; } printf("%d\n", ans); } } int main() { int cas; scanf("%d", &cas); while (cas -- > 0) work(); return 0; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。