結果
問題 | No.413 +5,000,000pts |
ユーザー | yuppe19 😺 |
提出日時 | 2016-06-06 17:07:54 |
言語 | Java21 (openjdk 21) |
結果 |
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 |
(要ログイン)
ソースコード
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(); } }