Може ли някой да ми обясни защо..


1
Може ли някой да ми обясни защо винаги ми дава True при следния код и ако може да ми каже защо става така и къде бъркам? Мерси предварително!

 Console.WriteLine("Enter positive number that is nor bigger than 100");
        int number = int.Parse(Console.ReadLine());
        bool check;
        if (number > 1 && number % 2 != 0)
        {
            Console.WriteLine("The Number is Posite and Prime");
            check = true;
            Console.WriteLine(check);
        }
        else
        {
            Console.WriteLine("The Number is not Posite and Prime");
            check = false;
            Console.WriteLine(check);
        }



Отговори



2

Дава true на всяко число, което е по-голямо от 1 и нечетно, при всички други случаи (числото е по-малко от 1 или четно)  изписва false.

Ако искаш да направиш проверка дали числото е просто, прегледай метода IsPrime ТУК :)


от dentia (12519 точки)


0
Пробвах ти кода, връща false при четни числа (и отрицателни). Всъщност проверяваш дали е положително И нечетно - само тогава е true. Работи правилно. Какви числа въвеждаш?

от vassildinev (365 точки)


0

Според мен дава true само за нечетни по-големи от нула числа. Ако въведеш четно число си дава false. 

Но все пак, условията не проверяват точно това, което се изписва. Т.е. това, че влиза в else не значи че числото не е положително, може и да е четно положително и пак отива там. А за Prime явно още не си сложил проверката. 


от Mirka (1454 точки)


0
Оф да да видях защо прави така... Иначе не съм го дописал за Prime...



0

Здравей, Георги,

И да, и не:

Да, ако използваш ситото на Ератостен буквално - и изключиш само 2, 3, 5, 7 - ще изпълниш условието на тази задача от домашното защото иска прооверка за числата до 100, и няма да даде верен резултат за 121.

Не, защото ситото на Ератостен е принцип, който може да бъде логически продължен.

Принципът е да се изключват последователно всички числа кратни на нещо, а това което остане след като направим изключването на кратните числа за определени граници, ще сa простите числа в тези определени граници:

Сито на Ератостен

Можеш да го провериш и с loop length 1000000, винаги ще работи, и винаги ще прилага същия принцип на Ератостен: последователно изключване на всички числа кратни на нещо - виж в  y locals values в debug mode.

След като целият ти number range мине през ситото - ще са изхвърлени всички кратни (not-prime), и ти остава или да отпечаташ всички Prime:

for(int z = 2; z < 1000000;z++) { if(!notPrime.Contains(z)) { Console.WriteLine(z);

 } }

или да си провериш отделно число:

        Console.WriteLine( (!notPrime.Contains(num))? "\nPrime\n" : "\nNot Prime\n" );




3

Здравей, Иване,

Да, в условието пише:

Write an expression that checks if given positive integer number n (n <= 100) is prime (i.e. it is divisible without remainder only to itself and 1).

Т.е. подсказват, че прости числа (Prime) са тези, които се делят само на 1, и на себе си; 25 не е просто число, защото се дели на 5; 21, не е просто число, защото се дели на 3, и на 7.

За да решиш задачата, тръгваш от кода, който вече си написал, и както си направил проверката дали числото се дели на 2 (number % 2 != 0), правиш същото за 3, 5, и 7

защо точно за тях пише в Ситото на Ератостен.

Просто ще си продължиш твоя си код с ... && (number % 3 != 0) && ...




3
Този алгоритъм ще работи за конкретната задача(n <= 100), но по принцип не е верен. Ако проверяваш само дали се дели на 2,3,5 или 7 за числото 121 например ще получиш, че е просто, а то се дели на 11.


1

@georgikostadinov

"... но по принцип не е верен."

Предложеното от Катя, както и решението на Михаела "по принцип" се нарича оптимизация на алгоритъма на Ератостен. Състои се в това, че не се проверява (даденото число) за делимост на други (вече известни) прости числа, по-големи (над) от квадратния му корен! Оптимизираният алгоритъм на Ератостен изисква много по-малко изчислително време, като върши абсолютно същата работа (без грешка).

Има ли смисъл да се проверява за делмимост например на 97 при дадено число 99 ? В случай, че даденото число е 121 не мисля, че има смисъл да се проверява за делимост на 119, нали така?

В случая проверката за делимост на 2,3,5 и 7 е напълно достатъчна за решението на задачата. Даже в някои случаи (когато числото е по-малко от 7^2) няма смисъл от цялата проверка.


от Zenix (628 точки)



0

Аз имам някакво решение на тази  задача , ако ще ви е от помощ може да го погледнете . С функция е написано решението но може да се сложи и в main . Като цяло  се проверява дали даденото число се дели на кое да се число по-малко от него и накрая ако се окаже ,че се дели само на себе си ( всяко число се дели и на 1 ) =>  че числото е просто. Прави се с един цикъл for и вътре в него if за проверка .

  https://github.com/tima-t/GitRepository/blob/master/OperatorsAndExpressions/PrimeNumberCheck/PrimeNumberCheck.cs


от tito_t (35 точки)