< Summary

Information
Class: LeetCode.Algorithms.ClosestPrimeNumbersInRange.ClosestPrimeNumbersInRangeSieveOfEratosthenes
Assembly: LeetCode
File(s): D:\a\LeetCode-CS\LeetCode-CS\source\LeetCode\Algorithms\ClosestPrimeNumbersInRange\ClosestPrimeNumbersInRangeSieveOfEratosthenes.cs
Line coverage
93%
Covered lines: 44
Uncovered lines: 3
Coverable lines: 47
Total lines: 91
Line coverage: 93.6%
Branch coverage
88%
Covered branches: 16
Total branches: 18
Branch coverage: 88.8%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
ClosestPrimes(...)83.33%121290.32%
SieveOfEratosthenes(...)100%66100%

File(s)

D:\a\LeetCode-CS\LeetCode-CS\source\LeetCode\Algorithms\ClosestPrimeNumbersInRange\ClosestPrimeNumbersInRangeSieveOfEratosthenes.cs

#LineLine coverage
 1// --------------------------------------------------------------------------------
 2// Copyright (C) 2025 Eugene Eremeev (also known as Yevhenii Yeriemeieiv).
 3// All Rights Reserved.
 4// --------------------------------------------------------------------------------
 5// This software is the confidential and proprietary information of Eugene Eremeev
 6// (also known as Yevhenii Yeriemeieiv) ("Confidential Information"). You shall not
 7// disclose such Confidential Information and shall use it only in accordance with
 8// the terms of the license agreement you entered into with Eugene Eremeev (also
 9// known as Yevhenii Yeriemeieiv).
 10// --------------------------------------------------------------------------------
 11
 12namespace LeetCode.Algorithms.ClosestPrimeNumbersInRange;
 13
 14/// <inheritdoc />
 15public class ClosestPrimeNumbersInRangeSieveOfEratosthenes : IClosestPrimeNumbersInRange
 16{
 17    /// <summary>
 18    ///     Time complexity - O(R * log(log R))
 19    ///     Space complexity - O(R)
 20    /// </summary>
 21    /// <param name="left"></param>
 22    /// <param name="right"></param>
 23    /// <returns></returns>
 24    public int[] ClosestPrimes(int left, int right)
 225    {
 226        var isPrime = SieveOfEratosthenes(right);
 227        var primes = new List<int>();
 28
 3029        for (var num = left; num <= right; num++)
 1330        {
 1331            if (isPrime[num])
 532            {
 533                primes.Add(num);
 534            }
 1335        }
 36
 237        if (primes.Count < 2)
 138        {
 139            return [-1, -1];
 40        }
 41
 142        var minDiff = int.MaxValue;
 143        var minNum1 = -1;
 144        var minNum2 = -1;
 45
 246        for (var i = 1; i < primes.Count; i++)
 147        {
 148            var diff = primes[i] - primes[i - 1];
 49
 150            if (diff >= minDiff)
 051            {
 052                continue;
 53            }
 54
 155            minDiff = diff;
 156            minNum1 = primes[i - 1];
 157            minNum2 = primes[i];
 58
 159            if (minNum2 - minNum1 == 2)
 160            {
 161                break;
 62            }
 063        }
 64
 165        return [minNum1, minNum2];
 266    }
 67
 68    private static bool[] SieveOfEratosthenes(int n)
 269    {
 270        var isPrime = new bool[n + 1];
 71
 272        Array.Fill(isPrime, true);
 73
 274        isPrime[0] = isPrime[1] = false;
 75
 1276        for (var i = 2; i * i <= n; i++)
 477        {
 478            if (!isPrime[i])
 179            {
 180                continue;
 81            }
 82
 3483            for (var j = i * i; j <= n; j += i)
 1484            {
 1485                isPrime[j] = false;
 1486            }
 387        }
 88
 289        return isPrime;
 290    }
 91}