Вы, кажется, смешиваете ИЛИ и И:
Цикл должен продолжаться, пока [...] ИЛИ [...] ИЛИ [...]
Вы на самом деле имеете в виду , чтобы сказать, что цикл должен заканчиваться , когда любое из этих трех условий не выполняется. Таким образом, логически цикл должен продолжать , в то время как все условий все еще выполняются. Это выражает логическое И, а не ИЛИ.
То есть вы имели в виду:
Do While (primzahl = True) And (k <= i * j) And (i * j <> 1)
Но это можно упростить.
Выражение primzahl = True
всегда будет истиннымпотому что, как только вы установите primzahl = False
, вы явно выйдете из цикла с помощью Exit Do
, поэтому условие While
никогда не будет оценено с помощью primzahl = False
.
Во-вторых, если (i * j <> 1)
равно true,первая итерация, это также будет верно для любой другой итерации, так как итерации не изменяются ни i
, ни j
. Но даже если бы это было верно в первый раз, то, конечно, k <= i * j
равно , а не true (вы уже установили k = 2
, и оно получает только большие значения), так что это условие всегда будет выполнено один разВы проходите условие k
.
Итак, принимая это во внимание, вы получите:
k = 2
Do While k <= i * j
' etc..
k = k + 1
Loop
И тогда почему бы не сделать это циклом For
, так как вы позволяетеk
перейти от 2 к i*j
?
For k = 2 To i * j
' etc.. (don't do k = k + 1 now)
Next
Относительно задания, которое вы дали себе: числа, следующие из i * j
с i
и j
, оба больше 1, по определению не простых чисел, поэтому нет смысла проверять их. Они имеют по крайней мере i
и j
в качестве делителей.