[英]Function to check numbers are prime numbers
我需要能够检查用户输入的两个数字( p
和q
)是否为质数,如果它们不是质数,则要求用户重新输入质数,直到输入质数对于p
和q
。 如果我输入的数字不是质数,我会被要求输入另一个数字,如果我第二次输入质数,它会告诉我该质数不是质数。 我该如何纠正这一点。
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
错误的p
和q
)之外,主要问题就在这里。 您将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.