結果
問題 |
No.3127 Multiple of Twin Prime
|
ユーザー |
|
提出日時 | 2025-04-25 21:39:54 |
言語 | C# (.NET 8.0.404) |
結果 |
AC
|
実行時間 | 504 ms / 2,500 ms |
コード長 | 4,222 bytes |
コンパイル時間 | 8,729 ms |
コンパイル使用メモリ | 172,144 KB |
実行使用メモリ | 266,020 KB |
最終ジャッジ日時 | 2025-04-25 21:40:26 |
合計ジャッジ時間 | 16,192 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 12 |
コンパイルメッセージ
復元対象のプロジェクトを決定しています... /home/judge/data/code/main.csproj を復元しました (102 ミリ秒)。 main -> /home/judge/data/code/bin/Release/net8.0/main.dll main -> /home/judge/data/code/bin/Release/net8.0/publish/
ソースコード
#nullable enable using System.Numerics; void Run() { var t = Int(); var qz = new (long, int)[t].AsSpan(); for (var i = 0; i < t; i++) qz[i] = (long.Parse(String()), i); qz.Sort(); var prime = new Prime(10001000).Primes; var ans = new long[t]; var l = 15L; var pi = 2; (long, bool) Next() { var p1 = prime[pi + 1]; var p2 = prime[pi]; return ((long)p1 * p2, p1 - p2 == 2); } foreach (var (n, i) in qz) { if (n < 15) { ans[i] = -1; continue; } while (true) { var (next, f) = Next(); if (next > n) break; pi++; if (f) l = next; } ans[i] = l; } Out(ans); } #region AtCoderIO _io_; var _backend_ = new StandardIOBackend(); _io_ = new(){ Backend = _backend_ }; Run(); _backend_.Flush(); string String() => _io_.Next(); int Int() => int.Parse(String()); void Out(object? x, string? sep = null) => _io_.Out(x, sep); class AtCoderIO { public required StandardIOBackend Backend { get; init; } Memory<string> _input = Array.Empty<string>(); int _iter = 0; public string Next() { while (_iter >= _input.Length) (_input, _iter) = (Backend.ReadLine().Split(' '), 0); return _input.Span[_iter++]; } public void Out(object? x, string? separator = null) { if (x == null) return; separator ??= Environment.NewLine; if (x is System.Collections.IEnumerable a and not string) { var objects = a.Cast<object>(); if (separator == Environment.NewLine && !objects.Any()) return; x = string.Join(separator, objects); } Backend.WriteLine(x); } } class StandardIOBackend { readonly StreamReader _sr = new(Console.OpenStandardInput()); readonly StreamWriter _sw = new(Console.OpenStandardOutput()) { AutoFlush = false }; public string ReadLine() => _sr.ReadLine()!; public void WriteLine(object? value) => _sw.WriteLine(value); public void Flush() => _sw.Flush(); } #endregion static class Extensions { public static T[] Repeat<T>(this int time, Func<T> F) => Enumerable.Range(0, time).Select(_ => F()).ToArray(); } class Prime { readonly int[] sieve; public readonly List<int> Primes = new(); public Prime(int n) { if (n <= 3) n = 3; sieve = new int[n + 1]; var (d, i, primes) = (2, 5, Primes); primes.Add(2); primes.Add(3); var span = sieve.AsSpan(); span[1] = 1; for (var j = 2; j <= n; j += 2) span[j] = 2; for (var j = 3; j <= n; j += 3) span[j] = 3; while (i <= n) { if (span[i] == 0) { primes.Add(i); for (var j = i; j <= n; j += i) span[j] = i; } i += d; d ^= 6; } } public bool IsPrime(int x) { if (x < 2) return false; if (x < sieve.Length) return sieve[x] == x; foreach (long p in Primes) { if (p * p > x) return true; if (x % p == 0) return false; } throw new Exception(); } // descending public List<int> Factorize(int x) { var factors = new List<int>(); while (sieve[x] > 1) { factors.Add(sieve[x]); x /= sieve[x]; } return factors; } public List<int> Divisors(int x) { var factors = Factorize(x); var powerLists = new List<List<int>>(); var last = 1; foreach (var factor in factors) { if (factor != last) { powerLists.Add(new List<int>(new int[] { 1 })); last = factor; } var powers = powerLists[^1]; powers.Add(powers[^1] * factor); } var divisors = new List<int>(); void Enumerate(int index, int divisor) { if (index == powerLists.Count) { divisors.Add(divisor); return; } foreach (var power in powerLists[index]) Enumerate(index + 1, divisor * power); } Enumerate(0, 1); return divisors; } }