Я пытаюсь написать программу, которая определяет, является ли число взаимно простым с номером euiler. Я реализовал al oop, который сообщает пользователю, является ли введенное число взаимно простым с номером euiler, если это не так, он заставляет их вводить другое число, пока оно не будет взаимно простым. Однако, когда я тестирую программу, если я ввожу число, не являющееся взаимно простым, для начала, а затем ввожу число взаимной простоты, вывод числа показывает исходное число, которое я ввел (число, которое не является взаимно простым). Я не понимаю, почему он выводит неправильный номер.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Math;
using System.Numerics;
namespace euiler
{
class Program
{
class GFG
{
static BigInteger _gcd(BigInteger e, BigInteger euiler)
{
// Everything divides 0
if (e == 0 || euiler == 0)
return 0;
if (e == euiler)
return e;
if (e > euiler)
return _gcd(e - euiler, euiler);
return _gcd(e, euiler - e);
}
static void coprime(BigInteger e, BigInteger euiler)
{
if (_gcd(e, euiler) == 1)
Console.WriteLine("Co-Prime");
else
do
{
Console.WriteLine("Not Co-Prime");
Console.WriteLine("Please enter another number which is Co-Prime");
e = BigInteger.Parse(Console.ReadLine());
coprime(e, euiler);
} while (_gcd(e, euiler) != 1);
}
static void Main(string[] args)
{
BigInteger p;
p = BigInteger.Parse(Console.ReadLine());
BigInteger q;
q = BigInteger.Parse(Console.ReadLine());
BigInteger euiler = (p - 1) * (q - 1);
BigInteger e;
Console.WriteLine("What is e?");
e = BigInteger.Parse(Console.ReadLine());
coprime(e, euiler);
Console.WriteLine("euiler number is = " + euiler);
Console.WriteLine();
Console.WriteLine("e must be co-prime to the euiler
number");
Console.WriteLine();
Console.WriteLine("e = " + e);
Console.WriteLine();
}
}
}
}