在计算中使用正确的数字 c#
Using correct number in calculation c#
用户输入两个素数相乘,又完成一次(a-1) * (b-1)的计算(a和b为输入的素数)。检查输入数字的功能,如果数字不是质数,将要求用户重新输入数字。但是,当我对此进行测试时,我注意到如果用户输入一个不是素数的数字,然后重新输入一个素数,则计算将基于不是素数的数字。例如。如果用户输入 2 和 4,因为 4 不是质数,他们会被要求输入另一个数字,例如 3,计算将基于数字 2 和 4。
我如何更正此问题以使用有效素数而不是最初输入的无效数字?
namespace example
{
class Program
{
class Co_P
{
static void coprime(ref int c, int calculation)
{
if (gcd(c, calculation) == 1)
Console.WriteLine("it's Co-Prime");
else
do
{
Console.WriteLine("it isn't Co-Prime");
Console.WriteLine("Enter a Co-Prime");
c = int.Parse(Console.ReadLine());
coprime(ref c, calculation);
} while (gcd(c, calculation) != 1);
}
static int Prime_a(int a) //check a is prime
{
if (a <= 1) return 0;
for (int i = 2; i <= a / 2; i++)
{
if (a % i == 0)
{
return 0; //not prime
}
}
return 1;
}
static void result(int a) //outputs if a is prime/or not
{
if (Prime_a(a) != 0)
{
Console.WriteLine(a + " is a prime number");
}
else do
{
Console.WriteLine(a + " isn't prime number");
Console.WriteLine();
Console.WriteLine("Please make sure you enter a prime number");
a = int.Parse(Console.ReadLine());
} while (Prime_a(a) == 0);
}
static int Prime_b(int b)
{
if (b <= 1) return 0;
for (int i = 2; i <= b / 2; i++)
{
if (b % i == 0)
{
return 0;
}
}
return 1;
}
static void resultb(int b)
{
int result = Prime_b(b);
if (Prime_b(b) != 0)
{
Console.WriteLine(b + " is a prime number");
}
else do
{
Console.WriteLine(b + " is not a prime number");
Console.WriteLine("Please make sure you enter a prime number");
b = int.Parse(Console.ReadLine());
} while (Prime_b(b) == 0);
}
static void Main(string[] args)
{
int a;
Console.WriteLine("Enter a prime number for a");
a = int.Parse(Console.ReadLine());
Console.WriteLine();
result(a);
Console.WriteLine();
int b;
Console.WriteLine("Enter a prime number for b");
b = int.Parse(Console.ReadLine());
Console.WriteLine();
resultb(b);
Console.WriteLine();
int total = a * b;
Console.WriteLine("The total of the prime numbers is = " + total);
int calculation = (a - 1) * (b - 1); //calculation
Console.WriteLine();
Console.WriteLine("The result = " + calculation);
Console.WriteLine();
}
}
}
你应该扩展 result
和 resultb
功能,这样它 returns 新提示有效号码
static int result(int a) {
var result = Prime_a(a);
if (result != 0)
...code...
return result
}
另外不要忘记重新分配这些值
...code...
a = result(a);
...code...
b = resultb(b);
int b;
Console.WriteLine("Enter a prime number for b");
b = int.Parse(Console.ReadLine());
Console.WriteLine();
resultb(b);
Console.WriteLine();
在行 resultb(b);
中,您将 int
传递给方法 resultb
。 int
是一个 值类型 ,或者换句话说,将 int
传递给一个方法意味着将其值传递给一个方法,在该方法中创建该值的副本。在这种情况下,b
的副本是在方法 resultb
中创建的。方法 resultb
中 b
的每个进一步更改都是在副本上进行的,原始内容保持不变。
在resultb
方法中通过添加ref
关键字通过引用传递参数。相反
static void resultb(int b)
{
// code
}
方法如下所示
static void resultb(ref int b)
{
// code
}
你会这样调用方法
resultb(ref b);
这是部分代码。
int b;
Console.WriteLine("Enter a prime number for b");
b = int.Parse(Console.ReadLine());
Console.WriteLine();
resultb(ref b);
Console.WriteLine();
现在,在方法 resultb
中传递 b
的每个更改都将反映在原始方法上。
您应该对方法 result(int a)
执行相同的操作。
用户输入两个素数相乘,又完成一次(a-1) * (b-1)的计算(a和b为输入的素数)。检查输入数字的功能,如果数字不是质数,将要求用户重新输入数字。但是,当我对此进行测试时,我注意到如果用户输入一个不是素数的数字,然后重新输入一个素数,则计算将基于不是素数的数字。例如。如果用户输入 2 和 4,因为 4 不是质数,他们会被要求输入另一个数字,例如 3,计算将基于数字 2 和 4。
我如何更正此问题以使用有效素数而不是最初输入的无效数字?
namespace example
{
class Program
{
class Co_P
{
static void coprime(ref int c, int calculation)
{
if (gcd(c, calculation) == 1)
Console.WriteLine("it's Co-Prime");
else
do
{
Console.WriteLine("it isn't Co-Prime");
Console.WriteLine("Enter a Co-Prime");
c = int.Parse(Console.ReadLine());
coprime(ref c, calculation);
} while (gcd(c, calculation) != 1);
}
static int Prime_a(int a) //check a is prime
{
if (a <= 1) return 0;
for (int i = 2; i <= a / 2; i++)
{
if (a % i == 0)
{
return 0; //not prime
}
}
return 1;
}
static void result(int a) //outputs if a is prime/or not
{
if (Prime_a(a) != 0)
{
Console.WriteLine(a + " is a prime number");
}
else do
{
Console.WriteLine(a + " isn't prime number");
Console.WriteLine();
Console.WriteLine("Please make sure you enter a prime number");
a = int.Parse(Console.ReadLine());
} while (Prime_a(a) == 0);
}
static int Prime_b(int b)
{
if (b <= 1) return 0;
for (int i = 2; i <= b / 2; i++)
{
if (b % i == 0)
{
return 0;
}
}
return 1;
}
static void resultb(int b)
{
int result = Prime_b(b);
if (Prime_b(b) != 0)
{
Console.WriteLine(b + " is a prime number");
}
else do
{
Console.WriteLine(b + " is not a prime number");
Console.WriteLine("Please make sure you enter a prime number");
b = int.Parse(Console.ReadLine());
} while (Prime_b(b) == 0);
}
static void Main(string[] args)
{
int a;
Console.WriteLine("Enter a prime number for a");
a = int.Parse(Console.ReadLine());
Console.WriteLine();
result(a);
Console.WriteLine();
int b;
Console.WriteLine("Enter a prime number for b");
b = int.Parse(Console.ReadLine());
Console.WriteLine();
resultb(b);
Console.WriteLine();
int total = a * b;
Console.WriteLine("The total of the prime numbers is = " + total);
int calculation = (a - 1) * (b - 1); //calculation
Console.WriteLine();
Console.WriteLine("The result = " + calculation);
Console.WriteLine();
}
}
}
你应该扩展 result
和 resultb
功能,这样它 returns 新提示有效号码
static int result(int a) {
var result = Prime_a(a);
if (result != 0)
...code...
return result
}
另外不要忘记重新分配这些值
...code...
a = result(a);
...code...
b = resultb(b);
int b;
Console.WriteLine("Enter a prime number for b");
b = int.Parse(Console.ReadLine());
Console.WriteLine();
resultb(b);
Console.WriteLine();
在行 resultb(b);
中,您将 int
传递给方法 resultb
。 int
是一个 值类型 ,或者换句话说,将 int
传递给一个方法意味着将其值传递给一个方法,在该方法中创建该值的副本。在这种情况下,b
的副本是在方法 resultb
中创建的。方法 resultb
中 b
的每个进一步更改都是在副本上进行的,原始内容保持不变。
在resultb
方法中通过添加ref
关键字通过引用传递参数。相反
static void resultb(int b)
{
// code
}
方法如下所示
static void resultb(ref int b)
{
// code
}
你会这样调用方法
resultb(ref b);
这是部分代码。
int b;
Console.WriteLine("Enter a prime number for b");
b = int.Parse(Console.ReadLine());
Console.WriteLine();
resultb(ref b);
Console.WriteLine();
现在,在方法 resultb
中传递 b
的每个更改都将反映在原始方法上。
您应该对方法 result(int a)
执行相同的操作。