-2

我有这个任务:编写一个表达式来检查给定的正整数 n (n ≤ 100) 是否为素数。例如 37 是素数。

    int number = int.Parse(Console.ReadLine());


    for (int i = 1; i < 100; i++)
    {
        bool isPrime = (number % number == 0 && number % i == 0);

        if (isPrime)
        {
            Console.WriteLine("Number {0} is not prime", number);
        }
        else
        {
            Console.WriteLine("Number {0} is prime", number);
            break;
        }

    }

这似乎不起作用。有什么建议吗?

4

6 回答 6

2
int number = int.Parse(Console.ReadLine());

bool prime = true;
// we only have to count up to and including the square root of a number
int upper = (int)Math.Sqrt(number);
for (int i = 2; i <= upper; i++) {
   if ((number % i) == 0) {
       prime = false;
       break; 
   }
}
Console.WriteLine("Number {0} is "+ (prime ? "prime" : "not prime"), number);
于 2012-11-02T02:52:23.380 回答
1

一个。你期待number % number做什么?

湾。每次通过循环时,您的 isPrime 检查都会“重置”。需要更多类似的东西:

bool isprime = true;
for(int i = 2; i < number; i++) {
    // if number is divisible by i then
    //    isprime = false;
    //    break
}
// display result.
于 2012-11-02T02:50:59.740 回答
0

问题是:for 应该从 2 开始,因为任何数字都会被 1 所取代。 number % number == 0 - 这一直是真的,如果他完成了所有的 for 步骤,那么这个数字就是素数,所以

else
{
     Console.WriteLine("Number {0} is prime", number);
     break;
}

不应该在那里。

代码应该是这样的:

        int number = int.Parse(Console.ReadLine());
        if (number == 1)
        {    Console.WriteLine("Number 1 is prime");return;}

        for (int i = 2; i < number / 2 + 1; i++)
        {
            bool isPrime = (number % i == 0);

            if (isPrime)
            {
                Console.WriteLine("Number {0} is not prime", number);
                return;
            }
        }
        Console.WriteLine("Number {0} is prime", number);

请注意,我没有对此进行测试...只是在这里写的。但你应该明白这一点。

于 2012-11-02T02:55:31.393 回答
0

使用 LINQ 的半严重可能解决方案(至少需要更小的范围):

var isPrime = !Enumerable.Range(2, number/2).Where(i => number % i == 0).Any();
于 2012-11-02T04:45:32.890 回答
0

程序检查给定的数字是否为质数。

素数是只能被1和它自己整除的数

class Program
{
    bool CheckIsPrimeNumber(int primeNum)
    {
        bool isPrime = false;

        for (int i = 2; i <= primeNum / 2; i++)
        {
            if (primeNum % i == 0)
            {
                return isPrime;
            }
        }
        return !isPrime;
    }
    public static void Main(string[] args)
    {
        Program obj = new Program();
        Console.Write("Enter the number to check prime  :  ");
        int mPrimeNum = int.Parse(Console.ReadLine());

        if (obj.CheckIsPrimeNumber(mPrimeNum) == true)
        {
            Console.WriteLine("\nThe " + mPrimeNum + " is a Prime Number");
        }
        else
        {
            Console.WriteLine("\nThe " + mPrimeNum + " is Not a Prime Number");
        }

        Console.ReadKey();
    }
}

谢谢!!!

于 2015-05-21T10:17:43.953 回答
-1

这是给你的:

void prime_num(long num)
    {
        bool isPrime = true;
        for (int i = 0; i <= num; i++)
        {
            for (int j = 2; j <= num; j++)
            {
                if (i != j && i % j == 0)
                {
                    isPrime = false;
                    break;
                }
            }
            if (isPrime)
            {
                Console.WriteLine ( "Prime:" + i );
            }
            isPrime = true;
        }
    }
于 2012-11-02T02:52:36.157 回答