結果
| 問題 |
No.719 Coprime
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2018-07-29 01:02:37 |
| 言語 | Java (openjdk 23) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,721 bytes |
| コンパイル時間 | 1,887 ms |
| コンパイル使用メモリ | 79,812 KB |
| 実行使用メモリ | 44,880 KB |
| 最終ジャッジ日時 | 2024-07-06 15:51:56 |
| 合計ジャッジ時間 | 10,573 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 43 WA * 18 |
ソースコード
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
new Main().run();
}
void run() {
Scanner sc = new Scanner(System.in);
boolean[] isPrime = new boolean[1263];
int[] g = new int[isPrime.length];
Arrays.fill(isPrime, true);
isPrime[0] = isPrime[1] = false;
int cnt = 0;
for (int i = 2; i < isPrime.length; ++i) {
if (!isPrime[i])
continue;
for (int j = 2 * i; j < isPrime.length; j += i) {
isPrime[j] = false;
}
if (i * i <= isPrime.length)
for (int j = i; j < isPrime.length; j += i) {
g[j] |= 1 << cnt;
}
++cnt;
}
ArrayList<Integer> plist = new ArrayList<>();
for (int i = 0; i < isPrime.length; ++i) {
if (isPrime[i])
plist.add(i);
}
int N = sc.nextInt();
boolean[] vis = new boolean[N + 1];
long[] dp = new long[1 << 11];
for (int i = N; i > plist.get(10); --i) {
if (!isPrime[i])
continue;
long[] ndp = Arrays.copyOf(dp, dp.length);
for (int j = i; j <= N; j += i) {
vis[j] = true;
for (int s = 0; s < 1 << 11; ++s) {
if ((s & g[i]) == 0) {
ndp[s | g[i]] = Math.max(ndp[s | g[i]], dp[s] + j);
}
}
}
dp = ndp;
}
for (int i = 2; i <= N; ++i) {
if (vis[i])
continue;
for (int s = 0; s < 1 << 11; ++s) {
if ((s & g[i]) == 0)
dp[s | g[i]] = Math.max(dp[s | g[i]], dp[s] + i);
}
}
long ans = 0;
for (long v : dp)
ans = Math.max(ans, v);
System.out.println(ans);
}
long gcd(long a, long b) {
if (a > b)
return gcd(b, a);
if (a == 0)
return b;
return gcd(a, b % a);
}
void tr(Object... objects) {
System.out.println(Arrays.deepToString(objects));
}
}