[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 точки)


0
using System;
class PrimeNumbers { static void Main() { byte z = 0; Console.WriteLine("Write a number (integer between 1 and 101): "); byte n = byte.Parse(Console.ReadLine()); for (byte i = 2; i < n / 2; i++) { bool check = (n % i == 0); if (check) { Console.WriteLine("The number is not prime"); z = 1; break; } } if (z==0) { Console.WriteLine("The number {0} is prime", n); } } }

от asenr (0 точки)


0

 

using System;
 
class ChecksIfPositiveIntIsPrime
{
    static void Main()
    {
        Console.Write("Check if number is prime: ");
        int i = int.Parse(Console.ReadLine());
        Console.WriteLine(isPrime(i)); 
        
    }
 
    private static bool isPrime(int n)
    {
        for (int i = 2; i < n; i++)
        {
            if (n % i == 0)
            {
                return false;
            }
        }
        return true;
    }
 
}
 



1
И разбира се моето решение:
http://blog.saykor.com/post/35699149169/write-an-expression-that-checks-if-given-positive

от saykor (8845 точки)


0

 

using System;
 
namespace _7.Prime
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Въведете число, което е по-голямо от 2 и по-малко от 100:\n");
            int a = int.Parse(Console.ReadLine());
 
            if (a > 1 && a <= 100)
            {
                bool prime = true;
                for (int i = 2; i <= Math.Sqrt(a); i++)
                {
                    if (a % i == 0)
                    {
                        prime = false;
                    }
                }
 
                if (prime)
                {
                    Console.WriteLine("\nЧислото " + a + " е просто.\n");
                }
                else
                {
                    Console.WriteLine("\nЧислото " + a + " не е просто.\n");
                }
            }
            else
            {
                Console.WriteLine("\nВъвеждайте само числа, в интервала от 2 до 100!\n");
            }
        }
    }
}

от jdimov (267 точки)


0

 

// Write an expression that checks if given positive integer 
//number n (n ≤ 100) is prime. E.g. 37 is prime.
 
using System;
 
class TaskSeven
{
    static void Main()
    {
        try
        {
            Console.Write("Please enter integer: ");
            int number = Convert.ToInt32(Console.ReadLine());
            int check = 0;
            int max = (int)Math.Sqrt(number);
            for (int i = 1; i <= max; i++)
            {               
                if (number % i == 0)
                {
                    check++;                  
                }
            }
            if (check == 1)
            {
                Console.WriteLine("The number {0} is  prime.", number);
            }
            else
                Console.WriteLine("The number {0} is not prime.", number);
        }
        catch
        {
            Console.WriteLine("Please enter correct integer!");
        }
    }
}
 

 


от idimitrov07 (282 точки)


0
Ето го и моето решение: static void Main(string[] args) { Console.WriteLine("Please enter a number to see if it is prime."); string consoleArgument = Console.ReadLine(); uint number = uint.Parse(consoleArgument); uint divider = 2; uint maxDivider = (uint)Math.Sqrt(number); bool prime = true; while (prime && (divider <= maxDivider)) { if (number % divider == 0) { prime = false; } divider++; } Console.WriteLine("Prime ? {0}", prime);
}

от m.nikolchovska (0 точки)


0

 

Пускам и моето решение:
 
using System;
 
class CheckIsPrime
{
    static void Main()
    {
        Console.WriteLine("Enter positive integer number (0; 100):");
        int n = int.Parse(Console.ReadLine());
        int divider = 2;
        int maxDivider = (int)Math.Sqrt(n);
        bool prime = true;
        while (prime && (divider <= maxDivider))
        {
            if (n % divider == 0)
            {
                prime = false;
            }
            else
                divider++;
        }
        Console.WriteLine("Is the number prime?" + " " + prime);
    }
}
 

от desito11 (40 точки)


0

като гледам има доста ето го моето в категория "къси"

 

using System;
 
class CheckIfNumberIsPrime
{
    static void Main()
    {
        int num;
        bool isPrime = true;
        Console.WriteLine("Enter int number from 1 to 100:");
        num = int.Parse(Console.ReadLine());
        for (int i = 2; i < num; i++)
        {
            if (num % i == 0 && i != num)
               isPrime = false;  
        }
        Console.WriteLine(isPrime);
    }
}

от glubox (395 точки)


1

 

Понеже взимането на корен квадратен е по-бавно от умножението, моето решение е следното:
 
static bool IsPrime(int n)
{
    if (n < 2) return false;
    for (int i = 2; i * i <= n; i++)
        if (n % i == 0) return false;
    return true;
}
 
static void Main()
{
    int n = int.Parse(Console.ReadLine());
    Console.WriteLine(IsPrime(n));
}

 


от jasssonpet (6814 точки)


1

 

Ето и моя отговор. Дали е верен. Мисля, че е ок!
 
using System;
 
class IntPrime
{
    static void Main()
    {
        Console.Write("Enter a positive integer (n<=100) n=");
        uint n = uint.Parse(Console.ReadLine());
        bool a = true;
        for (int i = 2; i < n; i++)
        {
            if (n % i == 0)
            {
                Console.WriteLine("The number n={0} is NOT prime",n);
                a = false;
                break;
            }    
        }    
            if (a == true) 
            {
                Console.WriteLine("The number n={0} is prime",n);
            }
    }
}

от deyan.keray (266 точки)


0
..С проверка дали е между 2 и 100. Гледах много решения, твоето ми хареса, защото е най-лесно за възприемане като че ли.
Console.Write("Enter int number to check if prime: "); int number = int.Parse(Console.ReadLine());
bool a = true;
if ((number <= 1) || (number > 100)) { Console.WriteLine("False number!"); } else { for (int i = 2; i < number; i++) { if (number % i == 0) { Console.WriteLine("- The number n={0} is not prime!", number); a = false; break; } } if (a == true) { Console.WriteLine("- The number n={0} is prime!", number); } }

от Kaloyanmm (63 точки)


0
Ето и моето решение:
http://project10telerik.cloudvps.bg/?p=128
Поздрави ! :)

от bigerbite (33 точки)