문제: app.codility.com/programmers/lessons/11-sieve_of_eratosthenes/count_semiprimes/
아.. 문제 이해도 어렵다.
int[] result = new int[P.Length];
int[] primeCheck = new int[N + 1];
int[] presum = new int[N + 1];
primeCheck[0] = 1;
primeCheck[1] = 1;
for (int i = 2; i * i <= N; i++)
{
if (primeCheck[i] == 1) continue;
int k = i * i;
while (k <= N)
{
primeCheck[k] = 1;
k += i;
}
}
for (int i = 2; i * i <= N; i++)
{
if (primeCheck[i] == 1) continue;
int k = i * i;
while (k <= N)
{
if (primeCheck[i] == 0 && primeCheck[k / i] == 0)
primeCheck[k] = 2;
k += i;
}
}
int count = 0;
for (int i = 0; i <= N; i++)
{
if (primeCheck[i] == 2)
count++;
presum[i] = count;
}
for (int i = 0; i < P.Length; i++)
{
result[i] = presum[Q[i]] - presum[P[i] - 1];
}
return result;
'공부하자 > Codility' 카테고리의 다른 글
[Codility] Lesson12. CommonPrimeDivisors (C#) (0) | 2020.11.27 |
---|---|
[Codility] Lesson12. ChocolatesByNumbers (C#) (0) | 2020.11.27 |
[Codility] Lesson11. CountNonDivisible (C#) (0) | 2020.11.27 |
[Codility] Lesson10. Peaks (C#) (0) | 2020.11.27 |
[Codility] Lesson10. MinPerimeterRectangle (C#) (0) | 2020.11.27 |