Cate cifre sunt prime?
Last Updated: Jan 26 2017 14:44, Started by
lowly
, Jan 20 2017 18:09
·
0
#1
Posted 20 January 2017 - 18:09
Salut, am gasit intr-un model de bac o problema, "Sa se afiseze cate cifre sunt prime din numarul : 1233405", se va afisa 5 .
Am incercat, am esuat si am decis sa intreb, eventual sa ma corectati. #include <iostream> #include <math.h> using namespace std; int main() { int n, nr, i, k; cin >> n; // 1233405 while (n) { nr = n % 10; for (i = 2; i < sqrt(nr); i++) { if (nr % i != 0) k++; } n = n / 10; } if (k > 0) cout << k; else cout << "nu exista cifre prime"; } Astept sfaturi... Edited by dani.user, 20 January 2017 - 18:15. |
#2
Posted 20 January 2017 - 18:20
Tu incrementezi pe k cand i nu e un divizor al cifrei (da "nr" in codul tau reprezinta o cifra - sursa de confuzie). Separa determinarea numerelor prime de numararea lor.
|
#3
Posted 20 January 2017 - 18:21
lowly, on 20 ianuarie 2017 - 18:09, said:
Salut, am gasit intr-un model de bac o problema, "Sa se afiseze cate cifre sunt prime din numarul : 1233405", se va afisa 5 . Am incercat, am esuat si am decis sa intreb, eventual sa ma corectati. #include <iostream> #include <math.h> using namespace std; int main() { int n, nr, i, k; cin >> n; // 1233405 while (n) { nr = n % 10; for (i = 2; i < sqrt(nr); i++) { if (nr % i != 0) k++; } n = n / 10; } if (k > 0) cout << k; else cout << "nu exista cifre prime"; } Astept sfaturi... if((cifra%2 && cifra != 9) || cifra == 2) Edited by OriginalCopy, 20 January 2017 - 18:34. |
#4
Posted 20 January 2017 - 18:48
Pentru numarul 1233405 raspunsul corect este 4 nu 5. Prin definitie numerele prime sunt acele numere nenule si neinversabile care nu au divizori proprii (daca numarul este N, nu exista a si b ambele neinversabile astfel ca N = a × b). In numere intregi 1 este inversabil (doar el si -1 sunt), deci NU e prim. 0 e nul. 4 are divizori proprii. Dintre cifrele acelea sunt prime doar 2 3 si 5.
|
#5
Posted 20 January 2017 - 18:52
sags, on 20 ianuarie 2017 - 18:48, said:
Pentru numarul 1233405 raspunsul corect este 4 nu 5. Prin definitie numerele prime sunt acele numere nenule si neinversabile care nu au divizori proprii (daca numarul este N, nu exista a si b ambele neinversabile astfel ca N = a × b). In numere intregi 1 este inversabil (doar el si -1 sunt), deci NU e prim. 0 e nul. 4 are divizori proprii. Dintre cifrele acelea sunt prime doar 2 3 si 5. |
#6
Posted 20 January 2017 - 18:59
Daca exercitiul o cere, inseamna ca exercitiul e conceput de cineva care vorbeste de numere prime fara sa stie ce sunt ele si cu ce se mananca…
|
#7
Posted 20 January 2017 - 19:05
sags, on 20 ianuarie 2017 - 18:59, said:
Daca exercitiul o cere, inseamna ca exercitiul e conceput de cineva care vorbeste de numere prime fara sa stie ce sunt ele si cu ce se mananca… Deci o formula corecta ar fi cifra == 2 || (cifra%2 == 1 && cifra%8 != 1) Edited by OriginalCopy, 20 January 2017 - 19:16. |
#8
Posted 20 January 2017 - 21:46
dani.user, on 20 ianuarie 2017 - 18:20, said:
Tu incrementezi pe k cand i nu e un divizor al cifrei (da "nr" in codul tau reprezinta o cifra - sursa de confuzie). Separa determinarea numerelor prime de numararea lor. P.s. mersi pentru organizarea codului, k-ul trebuie declarat cu 0 ori in int ori pe parcurs, ma miram de ce imi dadea un numar de 7 cifre cand rulam OriginalCopy, on 20 ianuarie 2017 - 19:05, said:
Bineinteles. Un sistem prost platit cum e cel de invatamant in Romania nu poate coagula in jurul sau decat prosti. Deci o formula corecta ar fi cifra == 2 || (cifra%2 == 1 && cifra%8 != 1) |
#9
Posted 20 January 2017 - 21:57
Si v-a sugerat doar la modul "eu sunt profesor" sau v-a dat si un motiv ?
uite o varianta aici -- https://forum.softpe...iabile-globale/ -- |
#10
Posted 20 January 2017 - 22:05
MarianG, on 20 ianuarie 2017 - 21:57, said:
Si v-a sugerat doar la modul "eu sunt profesor" sau v-a dat si un motiv ? uite o varianta aici -- https://forum.softpe...iabile-globale/ -- |
|
#11
Posted 20 January 2017 - 23:20
Se face cu matematica
ce va opreste sa analizati (logic) o problema ? "Sa se afiseze (1) cate (2) cifre (3) sunt prime (4) din numarul(5) : 1233405", se va afisa 4 (6) (1) - metoda de output (2) - contor (3) - cifre, model matematic, (4) - prime, model matematic (5) - numar arbitrar (6) - caz de test (3) - f : N → U* N - numere naturale U* - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} (multimea cifrelor in sistemul zecimal) (4) - f : U* ↛ P* U - cifre in sistemul zecimal P* - cifre prime { 1, 2, 3, 5, 7} U si P sunt constante si se poate determina o formula pentru fiecare nr = n % 10;noi spunem, te ajuta sa tii minte cu ce lucrezi cifra = numar %10 if((cifra%2 && cifra != 9) || cifra == 2) cifra == 2 || (cifra%2 == 1 && cifra%8 != 1) #include <stdio.h> int isDigitPrime(int digit) { return (digit == 2 || (digit % 2 == 1 && digit % 8 != 1)); } int numberOfPrimeDigits(int number) { size_t count = 0, digit; while (number) { digit = number % 10; if (isDigitPrime(digit)) { count++; } number /= 10; } return count; } int main() { int numar = 1233405; printf("%d has %d prime digits\n", numar, numberOfPrimeDigits(numar)); return 0; } 1 and Prime Numbers - Numberphile Edited by MarianG, 20 January 2017 - 23:22. |
#12
Posted 21 January 2017 - 08:58
Eu cred că v-a zis că se face cu for că să scape de voi mai repede.
Dacă vrei să faci programare de profesie, citește răspunsul lui MarianG că ți-a explicat totul foarte bine, începând de la analiza problemei și descompunerea sa în subprobleme până la numirea variabilelor și a funcțiilor - totul foarte curat. Apoi compară codul lui cu codul tipic "scris în școli" și detașează-te de ce vă învață la școală, că vă învață prost, mai mult vă bagă varză în cap. Elevii ăia care reușesc să facă performanță, nu reușesc mulțumită sistemului, ci în ciuda lui. |
#13
Posted 25 January 2017 - 23:27
O soluţie care mi se pare interesantă când vrei să afli dacă o cifră e număr prim (sau se află într-o altă mulţime cunoscută de cifre) este folosind funcţia strchr din biblioteca string.h.
Cifra x se află în mulţimea de cifre {c1, c2, c3, ..., cn} dacă codul ascii al cifrei x (x + '0') se află în şirul de caractere "c1c2c3...cn". În cazul de faţă: int prime_digit(int digit) { return strchr("2357", digit + '0') != 0; } Edited by sftpdt, 25 January 2017 - 23:28. |
#14
Posted 26 January 2017 - 14:44
Sa o luam metodic,multe sunt ok din codul initial altele nu.
Ideea lui este ok insa nu stie sa o duca la capat,multe notiuni in programare nu sunt prezentate in mod voit sau...din lipsa de cunostine. 1.Legat de codul initial variabilele trebuie initializate ex int k=0,nr=0 etc ; asta este o regula . De ce? Odata ce o vei folosi o variabila intr-o bucla mari sanse sa ai o eroare de compilare sau variabila sa agate un numar care nu l-ai dorit 2.Eroare provine din acel if care trebuie testat o singura data pentru un anume nr insa unde il pozitionezi ? si mai trebuie alte lucruri pe ici pe colo 3..Un cod pe care am incercat sa il fac cat mai lizibil 4.De aici pot incepe zeci de variante,derivatii de cod cu break; functii pe post de flag etc si de nu functii deja existente in biblioteci #include <iostream> using namespace std; int main() { int n=1233405; // numarul care trebuie spart in bucati int nr; // numerele care vor rezulta din folosirea % int i=0 ; // folosit pentru contor int k1=0,k2=0; // folosite pentru a numara cate numere prime k1 resp cate numere nu sunt prime k2 int a=0,b=0; // folosite pe post de flag while (n!=0) { // iesire din bucla doar n==0; nr = n % 10; // extragere numar pentru testare a=0; // cand testam nr------a si b trebuie reinitializat la 0; b=0; i=2; // toate numerele se divid cu 1 si cu el insusi=> contor intre 2 si n-1 while(i <nr) // testare numar inte 2 si n-1 { if (nr%i == 0) { a=1; } if (nr%i != 0) { b=1; } i++; } if(a==0&&b==1 || nr==2) // incrementam cand exista un numar prim & nr 2 este o exceptie { k1=k1+1; } if(a==1&&b==1) // bonus pentru numere care nu sunt prime { k2=k2+1; } n = n / 10; // creare noului n,pregatit pentru % } if (k1 > 0) cout << "Nr prime="<<k1; else cout << "nu exista cifre prime"; // puteti adauga si variabila k2 care va afisa si numerele care nu sunt prime return 0; } Cu respect, Iulian Edited by iulian_1976, 26 January 2017 - 15:12. |
Anunturi
Bun venit pe Forumul Softpedia!
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users