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
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.