public void Solve(TextReader input, TextWriter output) { var scanner = new StreamTokenizer(input); int testNum = scanner.NextInt(); Random rnd = new Random(); foreach (int caseId in Enumerable.Range(1, testNum)) { long R = scanner.NextLong(); long k = scanner.NextLong(); int n = scanner.NextInt(); var g = Enumerable.Range(0, n).Select(i => scanner.NextLong()).ToArray(); var d = Enumerable.Repeat(-1, n).ToArray(); var s = Enumerable.Repeat((long)0, n + 1).ToArray(); long answer = 0; for (int i = 0, r = 0; r < R; r++) { if (d[i] > -1) { int l = r - d[i]; answer += (R - r) / l * (s[r] - s[d[i]]); answer += s[(R - r) % l + d[i]] - s[d[i]]; break; } d[i] = r; long c = 0; int j = i; while (c + g[i] <= k) { c += g[i]; i++; if (i == n) { i = 0; } if (i == j) { break; } } answer += c; s[r + 1] = answer; } output.WriteLine("Case #{0}: {1}", caseId, answer); } output.Close(); }
public void Solve(TextReader input, TextWriter output) { var scanner = new StreamTokenizer(input); int testNum = scanner.NextInt(); bool[] isPrime = new bool [R + 1]; for (int i = 2; i <= R; i++) { isPrime[i] = true; } for (long i = 0; i <= R; i++) { if (isPrime[i]) { for (long j = i * i; j <= R; j += i) { isPrime[j] = false; } } } foreach (int caseId in Enumerable.Range(1, testNum)) { long n = scanner.NextLong(); if (n == 1) { output.WriteLine("Case #{0}: {1}", caseId, 0); } else { int answer = 1; for (long p = 2; p *p <= n; p++) { if (isPrime[p]) { long s = p * p; while (s <= n) { s *= p; answer++; } } } output.WriteLine("Case #{0}: {1}", caseId, answer); } } output.Close(); }