ここを見る
- class MinskyMysteryDiv2 {
- public:
- long long computeAnswer(long long N)
- {
- if (N == 0) return -1;
- const int P = 1000000;
- bool prime[P];
- fill(prime, prime + P, true);
- prime[0] = prime[1] = false;
- for (lli i = 2; i * i < P; ++i) {
- for (lli j = 2; i * j < P; ++j) {
- prime[i * j] = false;
- }
- }
- lli mn = 9999999999991LL;
- lli M = N;
- for (lli i = 1; i < P; ++i) {
- if (prime[i]) {
- while (M % i == 0) {
- mn = min(mn, i);
- M /= i;
- }
- }
- }
- if (M != 1LL) mn = min(mn, M);
- lli mx = 1;
- for (lli i = 2; i * i <= N; ++i) {
- if (N % i == 0) {
- mx = max(mx, i);
- mx = max(mx, N / i);
- }
- }
- lli res = mn + mx;
- return res < 9999999999991LL ? res : -1;
- }
- };
0 件のコメント :
コメントを投稿