给定数字是否为素数,如果不是则输出其所有除数

Is a given number a prime or not, if not output all its divisors

我的代码的主要部分正在运行,唯一不起作用的是它所有除数的输出。如果它不是素数,我的结果应该是这样的: 输入 -> 4 输出 -> 假 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();

这是一个可行的解决方案。您基本上必须将除数存储在某个地方或直接打印它们:

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;
    }

通过简单的检查,有两种生成输出的方法。到目前为止,您 计算 个除数,但既 store 它们也不 write 它们到输出.你可以替换

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

来自

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

或将除数存储在

List<int>

之后生成输出。

要打印所有除数,您需要将它们收集到某种集合中——这里是整数列表。

此外,所有整数都可以被 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));
}