結果
| 問題 |
No.413 +5,000,000pts
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2016-06-06 17:07:54 |
| 言語 | Java (openjdk 23) |
| 結果 |
AC
|
| 実行時間 | 1,736 ms / 5,000 ms |
| コード長 | 1,213 bytes |
| コンパイル時間 | 2,273 ms |
| コンパイル使用メモリ | 77,988 KB |
| 実行使用メモリ | 64,340 KB |
| 最終ジャッジ日時 | 2024-10-12 02:22:15 |
| 合計ジャッジ時間 | 6,047 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 1 |
ソースコード
import java.math.*;
import java.util.*;
import static java.lang.Math.*;
import static java.math.BigDecimal.*;
public class Main {
private static final long MAX_VALUE = (long)pow(10, 18);
private static final int N = 100000;
private static final BigDecimal TWO = BigDecimal.valueOf(2),
FOUR = BigDecimal.valueOf(4);
private long calc(long d) {
return (long)((-1 + sqrt(1+4*d)) / 2.0);
}
private BigDecimal mysqrt(BigDecimal a) {
BigDecimal x0 = ZERO,
x1 = BigDecimal.valueOf(sqrt(a.doubleValue()));
while(!x0.equals(x1)) {
x0 = x1;
x1 = a.divide(x0, 28, ROUND_HALF_UP).add(x0).divide(TWO, 28, ROUND_HALF_UP);
}
return x1;
}
private long correct(long d) {
return mysqrt(BigDecimal.valueOf(d).multiply(FOUR).add(BigDecimal.ONE)).subtract(BigDecimal.ONE).divide(TWO).longValue();
}
private void solve() {
for(long k=912345678L, cnt=0; cnt<N; ++k) {
long d = k*k + k - 1;
if(!(1 <= d && d <= MAX_VALUE)) { continue; }
if(calc(d) != correct(d)) {
++cnt;
System.out.println(d);
}
}
}
public static void main(String[] args) {
new Main().solve();
}
}