Является ли данное число простым или нет, если не вывести все его делители - PullRequest
0 голосов
/ 18 октября 2019

Основная часть моего кода работает, единственное, что не работает, это вывод всех его делителей. Мой результат, если это не простое число, должен выглядеть следующим образом: Input -> 4 Output -> false 1 2 4

Console.WriteLine("Type your number: ");
int n = Convert.ToInt32(Console.ReadLine());
int a = 0, i;
for (i = 1; i <= n; i++)
{
    if (n % i == 0)
    {
        a++;
    }
}

if (a == 2)
{
    Console.WriteLine("true");
}
else
{
    Console.WriteLine("false" + i);
}
Console.ReadLine();

Ответы [ 3 ]

0 голосов
/ 18 октября 2019

Из краткого осмотра, есть два способа получения выходных данных. Пока что вы считаете количество делителей, но ни не сохраняете их, ни не записываете их на выходе. Вы можете заменить

if (n % i == 0)
{
    a++;
}

на

if (n % i == 0)
{
    Console.WriteLine(i);
    a++;
}

или сохранить делители в

List<int>

, чтобы впоследствии генерировать вывод.

0 голосов
/ 18 октября 2019

Чтобы напечатать все делители, вам нужно собрать их в некоторый набор - список целых чисел, здесь.

Кроме того, все целые числа делятся на 1, поэтомуВы не хотите начинать там;и вы не хотите заканчиваться на n, так как n % n == 0.

var divisors = new List<int>();
for (var i = 2; i < 2; i++)
{
    if (n % i == 0)
    {
        divisors.Add(i);
    }
}
if (divisors.Count == 0)
{
    Console.WriteLine("true");
}
else
{
    Console.WriteLine("false " + String.Join(" ", divisors));
}
0 голосов
/ 18 октября 2019

Вот рабочее решение. Вы в основном должны где-то хранить свои делители или печатать их напрямую:

public static void Method(int n)
    {
        if (IsPrime(n))
        {
            Console.WriteLine($"{n} is a prime");
            return;
        }

        var divisors = new List<int>();

        for(var i = 1; i <= n; i++)
        {
            if (n % i == 0)
                divisors.Add(i);
        }

        Console.WriteLine($"{n} isn't a prime");
        Console.WriteLine($"The divisors are: {string.Join(", ", divisors)}");
    }

    public static bool IsPrime(int n)
    {
        for(var i = 2; i < n; i++)
        {
            if (n % i == 0)
                return false;
        }

        return true;
    }
...