繁体   English   中英

检查数字是否为素数的函数

[英]Function to check numbers are prime numbers

我需要能够检查用户输入的两个数字( pq )是否为质数,如果它们不是质数,则要求用户重新输入质数,直到输入质数对于pq 如果我输入的数字不是质数,我会被要求输入另一个数字,如果我第二次输入质数,它会告诉我该质数不是质数。 我该如何纠正这一点。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Math;
using System.Numerics;

namespace primenumbers
{
class Program
{
int Check_Prime(BigInteger p)         
        {
            if (p <= 1) return 0;
            for (int i = 2; i <= p / 2; i++)
            {
                if (p % i == 0)
                {
                    return 0; //not a prime number
                }
            }
            return 1;
        }

        static void  result (BigInteger p)
        {
            int result = Check_Prime(p);
            if (Check_Prime(p) != 0)
            {
                Console.WriteLine(" is a prime number");                    
            }

           else  do
            {
                    Console.WriteLine(" is not a prime number");
                    Console.WriteLine("Please enter a prime number");
                    p = BigInteger.Parse(Console.ReadLine());

                } while (result == 0);                
        }
        static int Check_Prime_Q(BigInteger q)

        {
            if (q <= 1) return 0;
            for (int i = 2; i <= q / 2; i++)
            {
                if (q % i == 0)
                {
                    return 0; //not a prime number
                }
            }
            return 1;
        }

        static void resultq(BigInteger q)
        {
            int result = Check_Prime_Q(q);

            if (Check_Prime_Q(q) != 0)
            {
                Console.WriteLine(" is a prime number");
            }

            else do
                {
                    Console.WriteLine(" is not a prime number");
                    Console.WriteLine("Please enter a prime number");
                    q = BigInteger.Parse(Console.ReadLine());

                } while (result == 0);
        }

        static void Main(string[] args)
        {
            BigInteger p; // = 61; //value of p

            Console.WriteLine("Enter a prime number for p");
            p = BigInteger.Parse(Console.ReadLine());
          result(p);


            BigInteger q; //53; //value of q

            Console.WriteLine("Ener a prime number for q");
            q = BigInteger.Parse(Console.ReadLine());
            resultq(q);
            result(p);

            BigInteger n = p * q; // calculation for n

            Console.WriteLine("p = " + p);
            Console.WriteLine();
            Console.WriteLine("q = " + q);
            Console.WriteLine();
            Console.WriteLine("n = " + n);

    }
}

}

除了代码中的许多内容可以改进(例如命名、返回值、在Main错误的pq )之外,主要问题就在这里。 您将i增加到p/2 ,然后您正在检查if (i == p)是否永远不会为真( p = 0除外)

static int Check_Prime(BigInteger p)
{
    int i;
    for (i = 2; i <= p /2; i++)
    {
        if (p % i == 0)
        {
            return 0; //not a prime number
        }
    }
    if (i == p) // never true except p == 0
    {
        return 1;
    }
    return 0; // always returns 0
}

只需删除if语句并返回1

static int Check_Prime(BigInteger p)
{
    if (p <= 1) return 0;
    for (int i = 2; i <= p /2; i++)
    {
        if (p % i == 0)
        {
            return 0; //not a prime number
        }
    }
    return 1;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM