Matematické Fórum

Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.

Nástěnka
22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.

Nejste přihlášen(a). Přihlásit

#1 24. 05. 2010 21:24

vojta.rylko
Zelenáč
Příspěvky: 5
Reputace:   
 

Prvočísla - reakce algoritmu na záporné hodnoty

Ahoj,

právě programuji funkci na test, zda zadané číslo je či není prvočíslem. Otázka je, zda pro záporné vstupní hodnoty a nulu má funkce vracet pouze False (jako wolframalpha) nebo má rovnou varovat, že se jedná o nepovolenou vstupní hodnotu (vyvolat výjimku Value Error)?

Které tvrzení je tedy správné? Nula není prvočíslo nebo nelze rozhodnout o prvočíselnosti nuly? Které chování je korektnější? (Z uživatelského hlediska - bylo-li zadáno záporné číslo, myslel to uživatel vážně, nebo se jedná o pravděpodobnou chybu?)

A abych nezapomněl - zdravím zdejší osazenstvo ;)

Offline

 

#2 24. 05. 2010 21:28

FailED
Příspěvky: 1255
Reputace:   42 
 

Re: Prvočísla - reakce algoritmu na záporné hodnoty

Taky zdravím,

wikipedia napsal(a):

Prvočíslo je přirozené číslo, které je beze zbytku dělitelné právě dvěma různými přirozenými čísly...

o každém jiném čísle bych řekl, že není prvočíslo.

Offline

 

#3 24. 05. 2010 21:57

frank_horrigan
Příspěvky: 938
Reputace:   31 
 

Re: Prvočísla - reakce algoritmu na záporné hodnoty

↑ FailED:

Jsem téhož názoru. Hodnoty menší než 1 (včetně, tedy menší nebo rovno) 1 nejsou v žádném případě prvočísla


The only thing worse than being wrong is staying wrong
Sun Tzu - The Art of War

Offline

 

#4 24. 05. 2010 23:24

hradecek
Příspěvky: 772
Pozice: Student
Reputace:   25 
Web
 

Re: Prvočísla - reakce algoritmu na záporné hodnoty

↑ vojta.rylko:
Taktiež zdravím,
Teda ak som správne pochopil...
Ak je úlohou programu resp. funkcie zistiť či je získané číslo prvočíslo, tak určite hodnoty menšie ako jedna(väčšie ako dva) prvočísla nie sú...
Môže nastať situácia kedy si spustí program niekto, kto nevie aké môžu byť prvočísla a určite skúsi aj záporné hodnoty a čaká odpoveď...Takže určite nejde o nepovolenú vstupnú hodnotu...a či už to zadal neúmyselne alebo úmyselne to nijako nezistíš...


Netrápte sa nad svojimi problémami s matematikou, môžem vás uistiť, že tie moje sú ešte väčšie. ~~Albert Einstein~~
Jak spozná člověk, že není pitomec ? - Moudrý člověk to nepozná nikdy a blbci je to jedno. ~~Jak přicházejí básnici o iluze~~
Někteří lidi se nikdy nezmění. Anebo se rychle změní a pak se zase rychle změní nazpátek. ~~Homer Simpson~~

Offline

 

#5 24. 05. 2010 23:41

vojta.rylko
Zelenáč
Příspěvky: 5
Reputace:   
 

Re: Prvočísla - reakce algoritmu na záporné hodnoty

Dá se tedy říct, že prvočísla nejsou i 3.5, -10.3 atd... Díky

Offline

 

#6 25. 05. 2010 09:02 — Editoval frank_horrigan (25. 05. 2010 09:07)

frank_horrigan
Příspěvky: 938
Reputace:   31 
 

Re: Prvočísla - reakce algoritmu na záporné hodnoty

↑ vojta.rylko:

Ano, správně :) NEJSOU. Z jednoho prostého důvodu:

Prvočíslo je takové přirozenéčíslo, které je dělitelné pouze 1 a sebou samotném (má Právě dva různé přirozené dělitele

Z definice prirozených čisel tedy plyne co?

Ohledně algoritmu - do pozadavku na zadání parametru bych jasně napsal userovi (i neznalému prvočísel) Něco ve smyslu "Zadej jakékoliv přirozené číslo" - z toho snad i tupec pochopí, že má zadat celé a kladné číslo :) Jinak, chceš-li to mít opravdu blbovzdorný, tak pozor na datové typy, když to hodíš do int (integer, nebo v čem to píšeš), tak jazyky mají tendenci desetinnou číst zahazovat. 3,1 = 3 (nebylo zadáno prvočíslo, program bude pracovat s 3 - vrátí že je prvočíslo) 3,7 má stejný problém. INT všechno, co je za čárkou(tečkou) zahodí a neví co tom. Takže typ double a test na celočíselnost a kladnost


The only thing worse than being wrong is staying wrong
Sun Tzu - The Art of War

Offline

 

#7 25. 05. 2010 11:31 — Editoval hradecek (25. 05. 2010 11:31)

hradecek
Příspěvky: 772
Pozice: Student
Reputace:   25 
Web
 

Re: Prvočísla - reakce algoritmu na záporné hodnoty

↑ vojta.rylko:
Ako už vraví kolega ↑ frank_horrigan:
Definícia prvočísla je jasná: Prvočíslo je prirodzené číslo(1,2,3,4,5...), ktoré je bez zbytku deliteľné práve dvoma rôznymi prirodzenými číslami, a to číslom jedna a sebou samým (tedy 1 prvočíslo nie je)


Netrápte sa nad svojimi problémami s matematikou, môžem vás uistiť, že tie moje sú ešte väčšie. ~~Albert Einstein~~
Jak spozná člověk, že není pitomec ? - Moudrý člověk to nepozná nikdy a blbci je to jedno. ~~Jak přicházejí básnici o iluze~~
Někteří lidi se nikdy nezmění. Anebo se rychle změní a pak se zase rychle změní nazpátek. ~~Homer Simpson~~

Offline

 

#8 25. 05. 2010 13:12 — Editoval Honzc (25. 05. 2010 13:13)

Honzc
Příspěvky: 4641
Reputace:   248 
 

Re: Prvočísla - reakce algoritmu na záporné hodnoty

↑ vojta.rylko:
Já bych to programátorsky řešil takto: (v Pascalu)
var n: Integer;
    repeat                     //Dokud se nezada cislo porad opakujeme zadani
      try
        WriteLn;
        Write(' Zadej prirozene cislo vetsi nez 1: ');
        ReadLn(n);
      except
        on EInOutError do  //Osetrení spatnych vstupu-napr.pismena,
        begin                    //nebo cisla vetsi nez 2147483647 (rozsah Integer) nebo desetinna
          WriteLn(' Cislo musi byt prirozene vetsi nez 1');
          n := -1;
        end;
      end;
    until n<>-1;
    if n<=1 then      //Pokud zadame cislo, ktere neni prirozene  a vetsi nez 1
      repeat          //tak to nedovolime
        WriteLn(' Cislo musi byt prirozene vetsi nez 1');
        WriteLn;
        Write(' Zadej prirozene cislo vetsi nez 1: ');
        ReadLn(n);
      until n>1;

Jinak prvočísla mohou být opravdu pouze přirozená čísla větší než jedna

Offline

 

#9 25. 05. 2010 13:48 — Editoval frank_horrigan (25. 05. 2010 14:09)

frank_horrigan
Příspěvky: 938
Reputace:   31 
 

Re: Prvočísla - reakce algoritmu na záporné hodnoty

Já v céčku (++, ANSI 2000 a lepší) takto

#include <iostream>
using namespace std;

bool IsPrime(num);

void main()
{
   int compare;
   double enter;
   bool prime =false; //pokud neprojdeme testy, okamzite else z posledniho if
   cout << "Zadej prirozene cislo\n"
   cin >> number;
   compare = number;
   if ((compare-number) != 0) // test zda vstup neni desetinne cislo
   {
       cout << "Zadne destiine cislo neni prvocislo\n";
   }
   if( number < 1) //test na zaporne/0
   {
       cout << "Zadne zaporne nebo 0 neni prvocislem\n";
   }
    else //vse ok
    {
        prime =IsPrime(number);
     }
    if (prime == true)
    {
      cout << "Zadane cislo " << number << "JE prvocislem\n";
    }
    else
    {
       cout << "Zadane cislo " << number << "NENI prvocislem\n";
    }

return;
}

Definice funkce IsPrime() se mi fakt psat nechce :), jenom česky, argument zkusim hodit modulo ruznymi deliteli (treba v cyklu s inkrementem o 1, ale klidne i elegantneji), pokud v nejakem vyjde modulo 0 (beze zbytku), cyklus okamzite konci s vystupem false


The only thing worse than being wrong is staying wrong
Sun Tzu - The Art of War

Offline

 

#10 25. 05. 2010 13:59

Honzc
Příspěvky: 4641
Reputace:   248 
 

Re: Prvočísla - reakce algoritmu na záporné hodnoty

↑ frank_horrigan:
Já céčko neumím, tak jenom pro moje vzdělání:
Tím tvým kódem jsou ošetřeny všechny případy?
Mám na mysli:
1. vstup není číslo, ale např. písmeno.
2. vstup je sice typu Integer, ale větší než rozsah Integer.
3. vstup je sice v rozsahu Integer, ale menší než 2. (-nek.,1>
4. vstup je desetinné číslo (kladné nebo záporné)
Za odpověď děkuji.

Offline

 

#11 25. 05. 2010 14:00

vojta.rylko
Zelenáč
Příspěvky: 5
Reputace:   
 

Re: Prvočísla - reakce algoritmu na záporné hodnoty

Nemáte někdo zkušenosti s algoritmem pro klasifikaci prvočíselnosti? Který je vhodný pro implementaci v C? Na výběr je podle anglické wiki více než deset algoritmů...

Offline

 

#12 25. 05. 2010 14:01 — Editoval hradecek (25. 05. 2010 14:21)

hradecek
Příspěvky: 772
Pozice: Student
Reputace:   25 
Web
 

Re: Prvočísla - reakce algoritmu na záporné hodnoty

↑ frank_horrigan:
Toto čo si napísal je C++ a nie C...len tak pre objasnenie ;).
↑ vojta.rylko:
Bohužiaľ nie, skúsenosti nemám...


↑ frank_horrigan:
EDIT: Hneď to lepšie vyzerá, keď je tam to ++ ;).


Netrápte sa nad svojimi problémami s matematikou, môžem vás uistiť, že tie moje sú ešte väčšie. ~~Albert Einstein~~
Jak spozná člověk, že není pitomec ? - Moudrý člověk to nepozná nikdy a blbci je to jedno. ~~Jak přicházejí básnici o iluze~~
Někteří lidi se nikdy nezmění. Anebo se rychle změní a pak se zase rychle změní nazpátek. ~~Homer Simpson~~

Offline

 

#13 25. 05. 2010 14:06 — Editoval frank_horrigan (25. 05. 2010 14:19)

frank_horrigan
Příspěvky: 938
Reputace:   31 
 

Re: Prvočísla - reakce algoritmu na záporné hodnoty

↑ Honzc:

Písmeno jsem neosetroval, nevim jestli lze ulozit pismeno (resp. jeji ASCII reprezent) do double, myslim ze neulozi, neprojde testem na zapornost a celociselnost a tak se fce IsPrime ani nezavola - ale dobrá poznámka k zamyšlení, časem zkusím.
ad 2) ukládám do double, tedy na 32(?) bitů, toho rozsah "normalni uzivatel" neprekroci - u tak velkych cisel (a zvlast kdyz by se "trefilo" prvocislo by trvalo testovani kur**ky (pardon, lepsi vyraz mne nenapada) dlouho - bylo by dobré ovšem uvést v "dokumentaci k progamu", nebo v nejakych poznamkach
ad 3) testuji, dodal jsem tam commenty - jeste k té 1 (cokoli mensiho neprojde ifem) - zavola funkci IsPrime a zjisti, ze má jenom za delitele jenom tu 1 -> prime = false; return(prime); Dobre definovat az v tele funkce, jinak samozrejme staci testovat cisla (a odfiltrovat cisla <2)
ad 4) totez

EDIT: ↑ hradecek: máš pravdu, spíš překlep než blbost... A "drsňácký" céčko nemá cout, ale  printf() apod.... Edituji :) Lepší? :)

EDIT 2: ↑ vojta.rylko: Ty algoritmy neznam, tedy ani zkusenost mít nemohu,  jeden jednoduchy (leč šíleně pomalý, uznávám) jsem příspěvek výše  navrhl :)


The only thing worse than being wrong is staying wrong
Sun Tzu - The Art of War

Offline

 

#14 05. 06. 2010 10:43 — Editoval byk7 (05. 06. 2010 10:43)

byk7
InQuisitor
Příspěvky: 4713
Reputace:   221 
 

Re: Prvočísla - reakce algoritmu na záporné hodnoty

hradecek (#7) napsal(a):

Definícia prvočísla je jasná: Prvočíslo je prirodzené číslo(1,2,3,4,5...),
ktoré je bez zbytku deliteľné práve dvoma rôznymi prirodzenými číslami,
a to číslom jedna a sebou samým (tedy 1 prvočíslo nie je)

Neodpustim si rýpnutí, jednička se za prvočíslo nepovažuje.


Příspěvky psané červenou barvou jsou moderátorské, šedá je offtopic.

Offline

 

#15 05. 06. 2010 10:50

Pavel Brožek
Místo: Praha
Příspěvky: 5694
Škola: Informatika na MFF UK
Pozice: Student
Reputace:   194 
 

Re: Prvočísla - reakce algoritmu na záporné hodnoty

↑ byk7:

Tak si taky rýpnu - ani čtyřka :-). hradecek v závorce chtěl ukázat přirozená čísla, ne prvočísla.

Offline

 

#16 05. 06. 2010 12:35

hradecek
Příspěvky: 772
Pozice: Student
Reputace:   25 
Web
 

Re: Prvočísla - reakce algoritmu na záporné hodnoty

↑ byk7:
Ano kolega ↑ BrozekP: to pochopil, chcel len poukázať že hladať prvočísla medzi celými alebo reálnymi číslami je hlúposť...a keby si si to prečítal dokonca tak v zátvorke je napísané

"teda 1 prvočíslo nie je"


Netrápte sa nad svojimi problémami s matematikou, môžem vás uistiť, že tie moje sú ešte väčšie. ~~Albert Einstein~~
Jak spozná člověk, že není pitomec ? - Moudrý člověk to nepozná nikdy a blbci je to jedno. ~~Jak přicházejí básnici o iluze~~
Někteří lidi se nikdy nezmění. Anebo se rychle změní a pak se zase rychle změní nazpátek. ~~Homer Simpson~~

Offline

 

#17 06. 06. 2010 17:01

vojta.rylko
Zelenáč
Příspěvky: 5
Reputace:   
 

Re: Prvočísla - reakce algoritmu na záporné hodnoty

Vyřešeno, konec flajmu ;)

Nakonec jsem použil Miller–Rabin primality test (pravděpodobnostní verzi), testováno pro 600-ti ciferné prvočísla a v pořádku.

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson