Другие языки программирования и технологии

программа C# if i % x == 0 пример

объясните почему результат выполнения:
1 простое число.
2 простое число.
3 простое число.
4 не простое число.
5 простое число.
6 не простое число.
7 простое число.
8 не простое число.
9 не простое число.

А ИМЕННО почему 9 не простое число, все сходится кроме 9, разве там не чередование (простое\не простое) дальше идет? если так то почему последние повторяются, я уж и до подсчета столбиком дошел, но так и не выходит там "не простое число" но программа почему так выдает, как посчитать чтоб понять, что там происходит, это пример из книги

using System;

class ChkNum
{
// Метод возвращает true, если х - простое число,
public bool Prime(int x)
{
for (int i = 2; i < x / 2 + 1; i++)
{
if ((x % i) == 0) return false;
}
return true;
}
}
class ParmDemo
{
public static void Main()
{
ChkNum ob = new ChkNum();
for (int i = 1; i < 10; i++)
if (ob.Prime(i)) Console.WriteLine(i +" простое число.");
else Console.WriteLine(i + " не простое число.");
Console.ReadKey();
}
}
9 делится на 3
Простые числа, это те числа которые делятся только на 1 и само себя
Джавадов Замик
Джавадов Замик
22 714
Лучший ответ
Кен Балачевцев долго думал при чем тут 3, понял что не понял цикл в методе, вписал Console.WriteLine(i); оказалось что перед 9 цикл 2 раза выполняется оттуда и 3, теперь все сошлось, спасиб что на мысль натолкнул, а то уже думал школьные учебники открывать, кучу бумаги заморал, а ошибка вообще в логике была
В книге предлагают именно i < x / 2 + 1 ???Сомневаюсь, что стоит продолжать читать эту книгу - если даже в таком простейшем случае написан откровенный бред.

Мало того, что тут бессмысленное +1 и куда проще и понятнее написать i <= x / 2. Так ещё и большая часть времени работы программы уходит на нагрев воздуха. Потому как достаточно проверять до квадратного корня из x, а не до x/2. И с ростом x количество бессмысленных проверок быстро растёт: для простого числа около 100 получим 50 итераций вместо необходимых 10, для числа около 10000 получим уже 5000 итераций вместо 100.
ДГ
Денис Гришин
85 454
У тебя только одна ошибка здесь, и вовсе не та, о которой ты спрашиваешь, там всё правильно. Надо добавить условие, что если число меньше 2, то это также непростое число. Т. к. 1 является непростым числом. Для удобства можешь просто сравнивать список простых/непростых числел в википедии, если сложно самому воспринимать

Типа:
if ((x % i) == 0 || x < 2) return false;
Джеки У
Джеки У
1 409
не простое - 1
простое - 2
простое - 3
не простое - 4
простое - 5
не простое - 6
простое - 7
не простое - 8
не простое - 9
не простое - 10
простое - 11
не простое - 12
простое - 13
не простое - 14
не простое - 15
не простое - 16
простое - 17
не простое - 18
простое - 19
не простое - 20
не простое - 21
не простое - 22
простое - 23
не простое - 24
не простое - 25
не простое - 26
не простое - 27
не простое - 28
простое - 29
не простое - 30
Рустам 5
Рустам 5
1 407