在计算c#中使用正确的数字

问题描述 投票:1回答:2

我正在尝试制作一个程序,其中用户输入两个素数,然后将它们相乘,并且完成了(a-1)*(b-1)的另一种计算(a和b是输入的素数) 。我创建了一个函数来检查输入的数字,如果数字不是素数,将要求用户重新输入数字。但是,当我对此进行测试时,我注意到,如果用户输入了一个IS N'T素数,然后重新输入一个素数,则计算将基于IS N'T素数。例如。如果用户输入2和4,由于4不是质数,他们会被要求输入另一个数字,例如3,计算将基于数字2和4。

我该如何纠正它,以便使用有效的质数而不是最初输入的无效数?

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

namespace example
{
class Program
{
    class Co_Prime
    {
        static int gcd(int c, int calculation) //greatest common divider
        {
            if (c == 0 || calculation == 0)
                return 0;

            if (c == calculation)
                return c;

            if (c > calculation)
                return gcd(c - calculation, calculation);

            return gcd(c, calculation - c);
        }

        // check if coprime
        static void coprime(ref int c, int calculation)
        {

            if (gcd(c, calculation) == 1)
                Console.WriteLine("Yes that is Co-Prime");

            else
                do
                {
                    Console.WriteLine("No that isn't Co-Prime");
                    Console.WriteLine("Please enter a number which is 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) //checks b is prime

        {
            if (b <= 1) return 0;
            for (int i = 2; i <= b / 2; i++)
            {
                if (b % i == 0)
                {
                    return 0; //isn't prime 
                }
            }
            return 1;
        }

        static void resultb(int b) //states if b is prime/or not
        {
            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);

            BigInteger calculation = (a - 1) * (b - 1); //calculation 
            Console.WriteLine();
            Console.WriteLine("The result of (a-1) * (b-1) = " + calculation);
            Console.WriteLine();

        }
    }
}
}

我正在尝试制作一个程序,其中用户输入两个素数,然后将它们相乘,并且完成了(a-1)*(b-1)的另一种计算(a和b是输入的素数) 。 ...

c# primes greatest-common-divisor
2个回答
1
投票

您应该扩展resultresultb函数,以便它返回新的提示有效数字


0
投票
        int b;
        Console.WriteLine("Enter a prime number for b");
        b = int.Parse(Console.ReadLine());
        Console.WriteLine();
        resultb(b);
        Console.WriteLine();
© www.soinside.com 2019 - 2024. All rights reserved.