Софтуерно Инженерство
Loading...
StanimirPavlov avatar StanimirPavlov 4 Точки

Data Type and Variables Exercises Problem 15. Fast Prime Checker - Reafactor

Здравейте,

Имам два въпроса относно задача 15. Fast Prime Checker - Refactor. Условие на задачата - Data Types and Variables - Exercises, след "поправка" на кода - http://pastebin.com/Dh77UafV. Имам два въпроса:

1. Кодът работи отлично (или роне дава 100 от 100 в Judge), но не мога да разбера защо вади "True" при curNum = 2 от първия for - цикъл и devider = 2 от втория for - цикъл? Не трябва ли да върне "False", при условие, че "2 % 2 == 0"?

2. При деклариране на булевата променлива преди първия for - цикъл, изходящият резултат се променя. Например при вход 5 (както е в примерния вход - изход в условието), изходът е:

2 -> True
3 -> True
4 -> False
5 -> True

Ако обаче булевата променлива се премести ето така: 

int num = int.Parse(Console.ReadLine());
bool isPrime = true;
        for (int curNum = 2; curNum <= num; curNum++)

...................,

резултатът става:

2 -> True
3 -> True
4 -> False
5 -> False

 

Тагове:
0
Programming Fundamentals
Kiril98 avatar Kiril98 66 Точки
Best Answer

1) Не, не трябва да връща false, защото 2 се дели на 2 без остатък, което значи че 2 % 2 == 0 ще върне true.

2) Що се отнася до този проблем, когато дефинираш isPrime променливата след първият for-цикъл ти казваш, че под default числото е просто и във вторият цикъл доказваш противното (т.е че не е просто). Когато го сложиш извън първият и стигнеш до curNum = 4, isPrime променливата ще остане false за всички следващи итерации на цикъла, защото никъде не я променяш на true.

PS: Пробвай да го дебъгнеш, ще си го изясниш :)

0
StanimirPavlov avatar StanimirPavlov 4 Точки

Благодаря за отговора - особено на вторият въпрос.

И все пак: "2 % 2 == 0" - това е условие да върне "false", както го прави за при curNum = 4 (4 % 2 == 0 -> False), продължавам да не разбирам защо при curNum = 2, съответно 2 % 2 == 0 (отново) -> True?? Напълно осъзнавам, че е нещо елементарно, но ....наистина не разбирам и предпочитам да питам. Извинявам се, ако дразня с въпроса.

0
Kiril98 avatar Kiril98 66 Точки

Всъщност грешката е моя, защото не го обясних както трябва. Когато curNum е равно на 2 то дори не влиза във вторият цикъл, защото divider е равно на 2, което е по-голямо от корен от 2. И затова печати true.

0
StanimirPavlov avatar StanimirPavlov 4 Точки

:) Много благодаря.

0