Может кто-нибудь объяснить, почему число выше и ниже будет рассчитывать, но мое действительное число не будет?

Таким образом, это консольное приложение просто печатает, является ли число простым или нет, отлично работает почти для каждого числа, но когда присваивание запрашивается для проверки функции по времени с двумя жестко закодированными числами (7389274937501454911 и 9389274937501454911), эти числа ничего не выводят, НО +1 или -1 на оба номера БУДЕТ распечатать.

using System;

namespace IsPrime
{
    class MainClass
    {
        public static void Main (string[] args)
        {
            string isPlaying = "y";
            bool isPrime;

            while(isPlaying == "y")
            {
                var timer = System.Diagnostics.Stopwatch.StartNew ();
                isPrime = isPrimeNum(9389274937501454911);
                if (isPrime)
                {
                    Console.WriteLine(9389274937501454911 + " is Prime");
                }
                else 
                    Console.WriteLine(9389274937501454911 + " is not prime");

                isPrime = isPrimeNum(7389274937501454911);
                if (isPrime)
                {
                    Console.WriteLine(7389274937501454911 + " is Prime");
                }
                else 
                    Console.WriteLine(7389274937501454911 + " is not prime");
                timer.Stop ();
                var time = timer.ElapsedMilliseconds;
                Console.WriteLine("Elasped Time: " + time + "\n");

                Console.WriteLine("Do you want to play again?: y / n");
                isPlaying = Console.ReadLine ();

            }
        }

        static bool isPrimeNum(ulong n)
        {
            if (n == 1 || n == 2)
                return true;

            if (n % 2 == 0)
                return false;

            for(ulong i = 3; i < n; i = i + 2) 
            {
                if (n % i == 0)
                    return false;
            }

            return true;
        }

    }
}

1 ответ

Я исправил ваш код, попробуйте сейчас

using System;

namespace IsPrime
{
    class MainClass
    {
        public static void Main (string[] args)
        {
            string isPlaying = "y";
            bool isPrime;

            while(isPlaying == "y")
            {
                var timer = System.Diagnostics.Stopwatch.StartNew ();
                isPrime = IsPrime(9389274937501454911);
                if (isPrime)
                {
                    Console.WriteLine(9389274937501454911 + " is Prime");
                }
                else 
                    Console.WriteLine(9389274937501454911 + " is not prime");

                isPrime = IsPrime(7389274937501454911);
                if (isPrime)
                {
                    Console.WriteLine(7389274937501454911 + " is Prime");
                }
                else 
                    Console.WriteLine(7389274937501454911 + " is not prime");
                timer.Stop ();
                var time = timer.ElapsedMilliseconds;
                Console.WriteLine("Elasped Time: " + time + "\n");

                Console.WriteLine("Do you want to play again?: y / n");
                isPlaying = Console.ReadLine ();

            }
        }

        public static bool IsPrime(ulong number)
        {
            if (number == 1) return false;
            if (number == 2) return true;
            if (number % 2 == 0) return false;

           //This returns the whole number greater than or equal to the specified number, and in this case
           //In this case, I take the square root, obvious to divide in half, so the variable i increases twice, since I'm working with the biggest number and divided in half
            var boundary = (ulong)Math.Floor(Math.Sqrt(number));

            for (ulong i = 3; i <= boundary; i += 2)
            {
                if (number % i == 0) return false;
            }

            return true;
        }
    }
}
Другие вопросы по тегам