[C#] Operators and Expressions - 7 Задача


10

7.Write an expression that checks if given positive integer number n (n ≤ 100) is prime. E.g. 37 is prime.

 
Ето едно полурешение на задачката. Понеже за пръв път се сблъсквам с if /else ми е малко мъгла но това мисля че е почти това начина да се направи задачката. Програмката работи почти толкова добре колкото искам но не ми смята с точност деленето което присвоявам във variableResul и за това след като  в случая мине числото 19 от цикъла резултата  ми е 1.0 и ми вдига веднъж резултата  за primeRule което (не ме кефи) . Идеята  ми е  да ги сравнява и  резултата от деленето е точно 1.0 тогава да ми пипа primeRule.Отворен съм за  предложения. Приемам и други решения  на задачката но  първо бих искал да я довърша по моя си начин
 
 int myDigit = 37;
        int primeRule = 0;
        for (int i = 2; i < myDigit; i++)
        {
            double variableResult = myDigit / i;
            if (variableResult == 1.0)
            {
                primeRule++;
            }
            else;
        }
            Console.WriteLine(primeRule <= 1 ? "This number is prime" : "this number is not prime");
                //Console.Write((myDigit % i == 0 ? "This number is Prime": " ")); 
        
 
 

в C# Fundamentals от Даниел Мечкарски (0 точки)


Отговори



5

Ето тази секция може да я направиш по малко по -различен начин:

double variableResult = myDigit / i;
            if (variableResult == 1.0)
            {
                primeRule++;
            }
            else;
Просто провярявай дали даденото число се дели без остатъка на i с помощатта на %
counter = 0
if( number % i == 0 )
{
counter++
}
ако counter e > от 2 , то числото не е просто т.к. се дели на повче от 2 числа ( себе си и 1 )
 
Edit: Изпревари ме :)
 
Може да оптимизираш цикъла, като го краш да върти не до myDigit числото, а до корен квадратен на myDigit числото .
 

от Teodor92 (13062 точки)


0
я поясни малко за този корен квадратен че ми стана интересно. според мен няма да работи понеже точно като стигне до моето число минава през if-a и ми вдига брояча на 1 и така го изкарвам че е просто число. Ако брояча стига до корена той ако не е цяло число как ще го пребори не знам малко ми е тъмна Индия там

от Даниел Мечкарски (0 точки)

0
Значи, тук малко трудно ще ти го обясня, но нека пробвам: 1. Няма да има проблем с това дали числото е цяло или не, т.к. то служи само за условие, ние за друго не го ползваме. 2. Идеята с корен квадратен идва от ако дадено число не се дели на нито едно число до корен квадратен, то то е просто. Но тогава логиката на твоя код ще се промени малко. Ето малко примерен: bool isPrime = true; for(int i = 2; i <= Math.Sqrt(number); i++) { if(number%i == 0) { isPrime = false } }
И накрая вече проверяваш стойността на isPrime.

от Teodor92 (13062 точки)


1

Ето и моето решение, ограничението е до толкова, до колкото е приемането на стойности на sbyte. Мисля, че е добро. Очаквам вашите мнения. 

 

        Console.WriteLine("Enter positive integer number n (n ≤ 100) for check if is prime:");
        sbyte number = sbyte.Parse(Console.ReadLine());
        sbyte control = 0;
        for (int i = 2; i < number; i++)
        {
            if ((number % i) == 0)
            {
                Console.WriteLine("The number isn't prime");
                i = number;
                control = 1;
            }
        }
        if (control == 0 )
        {
             Console.WriteLine("The number is prime");
        } 

от nada (0 точки)


0

Моят "откраднат" отговор от колегата "Plamen 태권도 Yovchev", за което благодаря много.

http://pastebin.com/sL6qRdkw


от Baltiyski (49 точки)


0

придържам се към условието на задачата да се използва дадено число (в случая зададено в конзолата), което трябва да е положително и да е по-малко или равно на 100. От определението за просто число:

"В математиката просто число се нарича всяко естествено число, по-голямо от 1, което има точно два естествени делителя — 1 и самото себе си. Естествените числа, по-големи от едно, които не са прости, се наричат съставни. Числата нула и едно не са нито прости, нито съставни."

следва, че то трябва и да е по-голямо от 1.

PrimeNumbers

 


от lmarkov (20 точки)


0

Здравейте имам нужда от малко помощ със задачката. Не иска да ми се компилира и ми изкарва следната грешка : "The name 'check' does not exist in the current context " ето го и кода някой ако има идея .. http://pastebin.com/JPvr4Uk5


от Martichka (90 точки)


0
Аз го направих така, но гледах в следващата лекция за циклите.
using System;
class Exercise7 { static void Main() { Console.WriteLine("Enter a positive integer number between 0 and 100: "); uint num = uint.Parse(Console.ReadLine()); if ((num >= 0) && (num <= 100)) { uint divider = 2; uint maxDivider = (uint)Math.Sqrt(num); bool prime = true; while (prime && (divider <= maxDivider)) { if (num % divider == 0) { prime = false; } divider++; } if (prime == false) { Console.WriteLine("The entered number is not prime"); } else { Console.WriteLine("The entered number is prime"); } } else Console.WriteLine("The entered number is not between 0 and 100!"); } }

от mortal (417 точки)


0
Eто и моето решение, макар че не знам дали съм права. Реших да проверя дали числото се дели на простите числа 2,3,5,7, само това успях да измисля.
http://pastebin.com/AiEPb9bC

от Yuliya Dimova (0 точки)


0

@martchka Имаш на 13 ред след for- а ";" (точка и запетая), което не се компилира. Махни символа и кода върви. Не съм проверявал логиката ти, но като начало това е проблемът.

@Yuliya Dimova Решението ти е вярно за всички прости числа, по- големи от 10. Но ако въведеш 2, 3, 5 или 7 програмата ти няма да ги отчете като прости, което е пропуск.

Както е споменато в един от отговорите, задачата се състои в това да се провери делимостта на простите числа, по- малки от корен квадратен от максималния възможен input (100). Т.е. трябва да се провери дали числото е 2, 3, 5 или 7 или дали не се дели на нито едно от тях (в случай, че е по- голямо от 10). В моят вариант съм добавил обичайните проверки на input (които малко или много си пействам във всички задачи), както и важното уточнение, че 1 не е нито просто, нито сложно (подобно на четността на нулата). Надявам се да е изчерпателен.

http://pastebin.com/iBLaUtEb

П.П. Тъй като въведеното число е между 1 и 100, типът byte би бил най- адекватен.


от Anubis_Black (1521 точки)


0

Това е моето решение:

using System;

class IsTheNumberPrime
{
    static void Main()
    {
        Console.Write("Enter positive integer to chek if it is prime: ");
        byte n = byte.Parse(Console.ReadLine());
        byte sqrtN = (byte)Math.Sqrt(n);
        bool flag = false;

        if (n == 1)
        {
            Console.WriteLine(n + " is not prime");
        }
        else
        {
            if (n == 2 || n == 3)
            {
                Console.WriteLine(n + " is prime");
            }
            else
            {
                for (byte i = 2; i <= sqrtN; i++)
                {
                    if (n % i == 0)
                    {
                        flag = true;
                        break;
                    }
                }
                Console.WriteLine(flag ? (n + " is not prime") : (n + " is prime"));
            }
        }         
    }
}


от dani.georgieva (3072 точки)


0
Ето още едно решение от мен :)
http://pastebin.com/6JpeAETn

от kalinnikol (5 точки)


1

 

  1. Първо правиш проверка дали числото е четно -                                 if(number % 2 == 0) { return number == 2 }
  2. Започваш от  3  и променяш стъпката на итерацията - вместо divider++, ползваш divider += 2. Така проверяваш само нечетните.

от djilanov (838 точки)