1 条题解
-
0
最幸运的数字(The Luckiest Number) 题解
思路分析
按题目要求使用对应数据结构与算法模拟/递推求解,注意数据范围边界与时间复杂度。
参考代码
#include <algorithm> #include <iostream> #include <numeric> #include <vector> using namespace std; using i128 = __int128_t; long long qpow(long long a, long long b, long long mod) { long long res = 1 % mod; a %= mod; while (b > 0) { if (b & 1) res = (long long)((i128)res * a % mod); a = (long long)((i128)a * a % mod); b >>= 1; } return res; } long long get_phi(long long n) { long long res = n; for (long long i = 2; i * i <= n; ++i) { if (n % i == 0) { while (n % i == 0) n /= i; res = res / i * (i - 1); } } if (n > 1) res = res / n * (n - 1); return res; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); long long L; int tc = 1; while (cin >> L && L != 0) { long long g = std::gcd(L, 8LL); long long M = 9LL * (L / g); if (std::gcd(10LL, M) != 1) { cout << "Case " << tc++ << ": 0\n"; continue; } long long phi = get_phi(M); vector<long long> divs; for (long long d = 1; d * d <= phi; ++d) { if (phi % d == 0) { divs.push_back(d); if (d * d != phi) divs.push_back(phi / d); } } sort(divs.begin(), divs.end()); long long ans = 0; for (long long d : divs) { if (qpow(10, d, M) == 1) { ans = d; break; } } cout << "Case " << tc++ << ": " << ans << "\n"; } return 0; }
- 1
信息
- ID
- 8594
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者