[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
Едно решение и от мен:
http://pastebin.com/HhmyQcKX

от ellapt (6303 точки)


0

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace _07.PrimeNum
{
    class PrimeNum
    {
        static void Main(string[] args)
        {
            int n = 37;
            bool prime = true;
            for (int i = 2; i <Math.Sqrt((double)n); i++)
            {
                if (n % i  == 0)
                {
                    prime = false;
                    break;
                }
                else
                {
                    prime=true;
                }
            }
            Console.WriteLine("Is the integer prime? " + prime);
        }
    }
}
 

от bankina (268 точки)


1
колеги, това е моето решение:
http://pastebin.com/kTyJ5QsU

от Dimov (907 точки)


0
Това е едно решение с кратък код и for цикъл който работи с всякакво цяло integer число:
http://pastebin.com/ZvP85V1h

от Kamen_Mitev (72 точки)


0
Не изкарва обаче верен резултат за a=7; или което и да е prime число. Когато няма вложени цикли по добре да го прекъснеш с break; , а не return;

от buddi (723 точки)

0
Благодаря ти за забележката, поправих я.Изпробвай я и си кажи мнението.

от Kamen_Mitev (72 точки)



0

 Само не забравяй да направиш още една проверка в самото начало:

if (a > 100)
          {
              Console.WriteLine("This is trial version, you can only check numbers n <= 100");
              Environment.Exit(0);
          }

от Petkan Draganov (0 точки)


0

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

Първоначално се чудих дали да не пробвам с for цикъл, но ми се стори, че с if statement е по-лесно и разбираемо, особено за мен като бос в програмирането.

 


от lostm1nd (846 точки)


0
До 100 работи добре, спор няма, но ако искаш да работи и над сто, трябва да провериш и модул от 11, 13, 17 и т.н. Например 121 го дава prime, а то е 11*11. И е излишно да слагаш кръгли скоби ако израза е само един ред, може би е добър навик, но мен лично ме объркват.

от iliyanti (15 точки)


1

Ето и моят вариант на тази задача:

http://pastebin.com/D3fF7FCr


от Tanya (202 точки)


0

Здравейте, 

 

Предлагам ви един вариант, който упражнява операторите в тази лекция.

http://pastebin.com/5UCWqr4A

Мисля, че съм покрил всичките случаи, но все пак ако има критики или съвети ...  с радост бих ги приел :) 


от vasil.subeff (80 точки)


0
Ужас, как успя да ги навържеш толкова много?

от scarylabcat (801 точки)

0
На пръв поглед гледам, че си изтървал седмицата




0

@vasil.subeff ако искаш да ти работи трябва да добавиш и primeNumber % 7 != 0, за да не лъже, че 49 е просто число. Споед мен освен това проверката дали числото е по-малко или равно на сто е по-добре да я сложиш в началото, така че да ограничи потребителя да въведе такова число, вместо да му връщаш невалидно число само. Иначе ето и моето решение http://pastebin.com/YAyHKgeG 
- като тук ако искаш да си съкратиш броя на циклите може да замениш:

 for (int i = 2; i < input; i++)     с     for (int i = 2; i <= Math .Sqrt(input); i++)  

от Rusekov (971 точки)


0
Какво имаш в предид под началото ? И добавих 7 , но то и преди това даваше че 49 не е просто число, не знам точно как но работеше :) та мерси за коментара :)

от vasil.subeff (80 точки)

0
Ами няма как да е давало, защото никъде не правиш проверка дали се дели числото на 7. В случая 49 се дели само на 7 и на себе си и нищо друго не може да го засече.
А това за проверката в началото - според мен ако сложиш един while цикъл, чрез който ако въведеното число не е по малко или равно на 100 и по-голямо от 1 да иска потребителя да въведе ново число <=100.

от Rusekov (971 точки)



0

Ето го и моето решенйе:

http://pastebin.com/mULbX7cR

Вкарал съм няколко проверки и съм сложил коментари по основните действия!


от gargantiua (0 точки)