Loading...
soki81 avatar soki81 2 Точки

[Homework] C# Basics - Operators Expressions and Statements - Problem {8} - Prime Number Check

не мога да я реша абсолютно начинаещ съм какво ли не опитах не става прегледах кода на една колежка но не го разбирам какво прави  https://github.com/anichka777/HWOperatorsExpressionsStatements/blob/master/08.PrimeNumberCheck/PrimeNumberCheck.cs

Тагове:
2
Programming Basics 01/10/2014 00:38:43
StanDimitroff avatar StanDimitroff 90 Точки

Ето моето решение.Виж коментарите и дали ще ти стане по-ясно.Аз първо проверявам дали въведеното число не 2, 3 ,5 или 7, защото до 8 само те се делят на себе си и на 1 без остатък.После ако не е някое от тях правя проверка дали числото се дели на 2, 3 ,5 и 7 с остатък и ако е така значи числото е просто, обратния случай- не е просто .Иначе колежката проверява дали числото се дели с остатък последователно от 1 до число, което е по-малко от корена на въведеното число, като последователно увеличава стойността на counter с 1.Дано съм го обяснил правилно :) Пробвай да дебъгваш няколко пъти, за да го разбереш по- добре.

5
28/01/2015 11:31:31
soki81 avatar soki81 2 Точки

много добре си го направил разбираемо е ...трябва да се науча да работя с if else мерси много...

0
Ifandieva avatar Ifandieva 71 Точки

StanDimitroff, моля за работещ линк към това решение.

0
StanDimitroff avatar StanDimitroff 90 Точки

Линкът е редактиран.

1
dimitarstoyanov90 avatar dimitarstoyanov90 164 Точки
static void Main(string[] args)
    {
//Конзолата приканва потребителя да въведе число между 2 и 100
        Console.WriteLine("Enter positive integer number n between 2 and 100");
//Запазва числото в променлива, под името numberN(от тип цяло число(integer)), като преобразува въведеното число от потребтеля в конзолата към същия целочисле тип
        int numberN = int.Parse(Console.ReadLine());
//Създава цикъл, който да се изпълнява докато условието в скобите  след while е вярно (докато numberN е по-голямо от 2 ||(логическо или) numberN е по-голямо от 100 
        while (numberN < 2 || numberN > 100)
        {
//Докато условието е вярно изписва на конзола TRY AGAIN
            Console.WriteLine("Try again");
//И отново приканва потребителя да въведе число ( демек тук в този цикъл тъй като искаме числото да е межжду 2 и 100, проверяваме дали това наистина е така, ако не приканва потребителя отново да въведе друго число
            numberN = int.Parse(Console.ReadLine());
        }
//Създава булева променлива, която приема стойност true(вярно)
        bool isPrime = true;
//Създава променлива, под името брояч, която да е равна на 1 и която да използва в следващия цикъл
        int counter = 1;
        //Trial division
//Създава следващия цикъл ( докато, брояча е по-малък или равен на корен квадратен от променливата numberN)
        while (counter <= Math.Sqrt(numberN))
        {
//ако остатъкът от деленото на променливата numberN с променливата counter (в случая 1) е равно на 0(==) и (логическо и) променливата counter е по- голяма от 1
            if (numberN % counter == 0 && counter > 1)
            {
//ако горното твърдение е вярно изпълняваме следното -> задаваме нова стойност на променливата isPrime , която да е равна на false (лъжа)
                isPrime = false;
            }
//казваме на променливата counter , при всяко завъртане на цикъла да променя стойността си +1( counter = counter +1)(при всяко завъртане на цикъла докато условието след WHILE е вярно)
            counter++;
        }
//Изписваме на конзолата ИС ЪОУР НУМБЕР ПРИМЕ + стойността на променливата isPrime
        Console.WriteLine("Is your number prime?\n{0}", isPrime);
    }
 
 
Дано съм ти помогнал, ако има нещо пиши :) Успех
6
dimitarstoyanov90 avatar dimitarstoyanov90 164 Точки

Както колегата по - долу казва решението на колежката май - наистина е неправилно, но като цяло дано ти помогне това , което написах за да разбереш хода на самата задача, която е написала (логиката). Което в случая е наж - важно и ако има грешки ще можеш да си поправиш :) ако не питай и такам :)

0
soki81 avatar soki81 2 Точки

неразбирам още циклите ... благодаря ти много за подробното обяснение...

0
Grigorov888 avatar Grigorov888 1 Точки

Много добре структорирано и полезно обясение. И аз благодаря !

0
Lyubo avatar Lyubo 172 Точки

Решението на колежката е малко грешно, ако въведеното число е по-малко от 2 връща "Invalid number!!!". Тук може да видиш какво е prime number, опитай се да решиш задачата сам и ако срешнеш проблеми пиши пак.

2
StanDimitroff avatar StanDimitroff 90 Точки

Ами Invalid е защото по дефиниция простото число е по-голямо от 1.В линка, който си публикувал го пише още на първото изречение :)

1
soki81 avatar soki81 2 Точки

прегледах темите за простите числа но не мога да приложа логиката си в задачата.... мерси все пак

0
Lyubo avatar Lyubo 172 Точки

@StaffDimitroff, ако погледнеш условието на задачата ще видиш че за числата по-малки от 2, програмата трябва да връща "false".
@soki81 погледни моето решение ако искаш, има и коментари.

1
svetli0o avatar svetli0o 134 Точки

Ето го и моето решение Линк . Едно число е просто ако се дели само на себе си. тоест всички числа, които се делят на 2, 3, 5, 7 не са прости (с изключение на тях самите). В моето решение аз имам булеви променливи, които казват дали въведеното число се дели на 2, после на 3, после на 5 и после на 7. В една променлива проверявам дали някоя от тези променливи дава true, ако да то тогава числото не е просто, ако сa false е просто. След това проверявам дали числото е 2,3,5,7, защото те са прости числа. Накрая извеждам крайния разултат. А решението което си дал като линк: в него се ползва алгоритъм за намиране дали дадено число е просто или не. Алгоритъма е следния: имаме един цикъл, който проверява дали нашето (даденото) число се дели на числата от 1 до корен квадратен от нашето число. Защо корен квадратен? ами, защото няма смисъл да въртим цикъла по - дълго, просто няма как едно число да се дели на числата след неговия корен квадратен, ако поекспериментираш ще видиш защо. Аз преди време доста експериментирах докато разбера защо точно до корен квадратен от числото се върти цикъла. :)

4
JorDancho avatar JorDancho 0 Точки

Супер!

Точно това търсех. Всички тези If than else още не ги разбирам. Но е добра идея да сложиш и един bool, който да гледа дали числото е по-голямо от едно. Защото по дефиниция Prime Numbers са по-големи от 1. Твоята задача изпълва условието, но ако използваш -5 ще каже, че е Prime :), което не е вярно. Благодаря за споделянето. Изхабих 2 часа със нещо от сорта на 

isPrime = (number > 1) && ((number == 2 || number == 3 || number == 5 || number == 7) || (number % 2 == 0 && number % 3 == 0 && number % 5 == 0 && number % 7 == 0 && number % 10 == 0 && number == 2));
Console.WriteLine("The number " + number + " is Prime? -> " + isPrime); ,

което между другото оцели повечето верни отговори, без "97". :)

0
Maka7a avatar Maka7a 6 Точки

Ето го и моето решение,сигурно не е най-простото,но се надявам да помогне :)

3
soki81 avatar soki81 2 Точки

kолега твоя код не дава мисля верни решения  я му задай 2 и 3...

1
StanDimitroff avatar StanDimitroff 90 Точки

Така 2, 3 ,5 и 7 ще излязат, че не са прости, а те са.Добави една проверка ако някое от въведените числа е едно от тези изброените, то то е просто и си готов.

2
Maka7a avatar Maka7a 6 Точки

Не се бях замислил...Мерси :)

0
dimitarstoyanov90 avatar dimitarstoyanov90 164 Точки

Цикъла е повтаряемост на едно и също нещо до момент , който условието което сме задали в самия него не е вярно. Правиме един WHILE цикъл и в скобите казваме (докато не стане 8 часа (примерно)). В тялото на цикъла ( демек между къдравите скоби {  }, казваме "пий бира", и какво става от тук нататък .. Ще пием бира докато не стане 8 часа без да му мислим. Надявам се, че горе долу ти обясним, малко прекалено образно но... :)

1
Shade avatar Shade 33 Точки

Ето това е моето решение с for цикъл.

0
BorisSimeonov avatar BorisSimeonov 26 Точки

Ето и моето решение, като съм се опитал да огранича итерациите на for-цикъла до корен квадратен на числото за по-бързо изпълнение на кода.

Prime Number Check

1
mbencheva avatar mbencheva 52 Точки

Във втория if, проверката: "num==1" не е ли излишна? (по-нагоре се проверява дани num>1)?

 

 

1
BorisSimeonov avatar BorisSimeonov 26 Точки

Наистина не съм обърнал внимание. Това ИЛИ в булевия израз на if конструкцията е ненужно.  Благодаря за корекцията, ще коригирам решението.

0
cap7ainjack avatar cap7ainjack 20 Точки

Здрасти!

Можеш ли ако имаш време накратко да обясниш твоето решение на тази задача? Горе долу си го обясних от нета, но все пак не ми е съсвсем ясно. Формулата с корен квадратен я разбрах.

Благодаря!

0
FunnyBunny avatar FunnyBunny 38 Точки

Ето и моето Решение. For-цикъла проверява дали даденото число има точно два делителя (с остатък нула).

0
Edwardcho avatar Edwardcho 5 Точки

Лелелле колко часа си бих главата  чудех се каква формула да гледам колко if else-a, и накрая ти се появи с "Проверявам дали има повече от два делителя" ами да бе! То е просто ако може да се дели на себе си и на 1 т,е има 2 делителя! БРАааво!

0
28/09/2017 13:19:06
brslv avatar brslv 69 Точки

Ето и моето решение с цикъл до корен квадратен на подаденото число. :) http://pastebin.com/cFivaZV0

0
Filkolev avatar Filkolev 4482 Точки

Не е това най-ефективният начин и не е особено изчистено като логика. Виж например решението на @BorisSimeonov малко по-нагоре. Това е класическият алгоритъм.

0
Cwetkoyy avatar Cwetkoyy 3 Точки

Това е моят код, дано да е полезен:

static void Main()
        {
            int n;
            n = Convert.ToInt32(Console.ReadLine());
            if (n == 0 || n == 1)
            {
                Console.WriteLine("False");
                Console.ReadLine();
            }
            else
            {
                for (int a = 2 ; a <= n / 2 ; a++)
                {
                    if (n % a == 0)
                    {
                        Console.WriteLine("False");
                        return;
                    }
                }
                Console.WriteLine("True");
                Console.ReadLine();
            }

....

0
24/10/2015 15:16:17
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.