如何在 C# 中使用 while 循环和 ifs 从区间返回最后一个素数

问题描述 投票:0回答:2

我正在尝试显示给定间隔的最后一个素数。例如:

  1. 如果 n 是 10 最后一个素数是 7

  2. 如果 n 是 11 最后一个质数是 11

  3. 如果 n 是 14 最后一个质数是 13

  4. 等等...

     public static uint LastPrimeNumberInInterval(uint n)
     {
         uint result = 0;
         uint i = 2;
    
         while (i <= n)
         {
             bool b = false;
    
             while (i <= n / 2)
             {
                 if (n % i == 0)
                 {
                     b = true;
                     break;
                 }
    
                 i++;
             }
    
             if (!b)
             {
                 result = i;
             }
    
             i++;
         }
    
         return result;
     }
    

但是当 n 是素数时我坚持只显示正确答案。有人能指出我的错在哪里吗?

c# .net if-statement while-loop primes
2个回答
1
投票

您需要在嵌套循环中使用不同的变量,并为每个检查的数字重置它。

public static uint LastPrimeNumberInInterval(uint n)
 {
     uint result = 0;
     uint i = 2;

 while (i <= n)
 {
     bool b = false;
     uint j = 2;

     while (j <= n / 2)
     {
         if (n % j == 0)
         {
             b = true;
             break;
         }

         j++;
     }

     if (!b)
     {
         result = i;
     }

     i++;
 }

 return result;


}

0
投票

我刚刚做了一些事情,它可能会有帮助

public static uint GetLastPrimeNumber(uint n)
    {
        if (n == 0 || n == 1)
        {
            return 0;
        }

        uint j = 2;
        while (j < n)
        {
            if (n % j == 0)
            {
                n--;
                j = 2;
                continue;
            }

            j++;
        }

        return n;
    }
© www.soinside.com 2019 - 2024. All rights reserved.