【发布时间】:2020-02-01 22:41:45
【问题描述】:
我需要能够检查用户输入的两个数字(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);
}
}
}
【问题讨论】:
-
你做的工作太多了;你只需要检查
sqrt(p),至少;见primality tests。