Second Opinion
Folosind serviciul second opinion ne puteți trimite RMN-uri, CT -uri, angiografii, fișiere .pdf, documente medicale. Astfel vă vom putea da o opinie neurochirurgicală, fără ca aceasta să poată înlocui un consult de specialitate. Răspunsurile vor fi date prin e-mail în cel mai scurt timp posibil (de obicei în mai putin de 24 de ore, dar nu mai mult de 48 de ore). Second opinion – Neurohope este un serviciu gratuit. www.neurohope.ro |
Numere prime!
Last Updated: Feb 07 2014 14:25, Started by
kent94
, Jan 21 2014 19:19
·
0
#1
Posted 21 January 2014 - 19:19
Salut!
Am o problema, eu pentru a afla daca un numar este prim folosesc codul (mai jos este scris), dar nu`l pot folosii in alte situatii,cum ar fi atunci cand mi se cere sa aflu cate elemente sunt prime dintr-un vector. Ma intereseza si pe mine un algoritm pe care l`as putea folosii in mai multe situatii... [size=2]#include<stdio.h> #include<conio.h>[/size] [size=2]int main(){ int nr,i,s=0; printf("Dati numarul:"); scanf("%d",&nr); for(i=1;i<=nr;i++){ if(nr%i==0){ s=s+1; } } if(s==2){ printf("Numarul %d este prim!",nr); } else printf("Numarul %d nu este prim!",nr); getch(); return 0; }[/size] |
#3
Posted 21 January 2014 - 19:35
Scrie o funcție de verificare a numărului prim x transmis ca parametru:
bool primChk(int x) { int s=0; for(int i=1; i<=x; i++) { if(x%i==0) s++; } if(s==2) return 1; // x este prim else return 0; // x nu este prim } Asta e baza; în funcție de cerința problemei pui diferite condiții ce depind de ceea ce vrei să calculezi. |
#4
Posted 21 January 2014 - 20:01
#5
Posted 21 January 2014 - 20:07
#6
Posted 21 January 2014 - 20:10
#7
Posted 21 January 2014 - 20:18
kent94, on 21 ianuarie 2014 - 20:10, said:
Daca imi puteti da un alt algoritm prin care pot afla daca un numar este prim sa nu ar fi cel mai bine... Poftim: bool primChk(int x) { for (int i = 2; i < sqrt(x); i++) { if (x%i == 0) { return 0; break; } } return 1; } Edited by namespace, 21 January 2014 - 20:24. |
#8
Posted 25 January 2014 - 09:07
Uite un cod cât de cât optimizat:
#include <stdio.h> #include <math.h> int main(void) { int n,d,ok; printf("n="); scanf("%d",&n); if (n%2==0) { if (n==2) printf("Este prim"); else printf("Nu este prim"); } else { d=3; ok=1; while (d<=sqrt(n) && ok==1) if (n%d==0) ok=0; else d=d+2; if (ok==1) printf("Este prim"); else printf("Nu este prim"); } return 0; } Edited by sftpdt, 25 January 2014 - 09:08. |
#9
Posted 25 January 2014 - 12:40
Problema ta nu e de ce un algoritm e mai bun decat altul sau care-i cel mai bun.
Problema ta, asa cum ai cerut, e ca nu stii inca cum sa refolosesti codul fara sa-l rescrie . Ti s-a si raspuns pentru asta, sa inveti sa scrii functii. |
#10
Posted 31 January 2014 - 13:26
Revin...Uite am scris un cod pentru a afla care numere sunt prime dintr-un vector... Am o eroare,nu inteleg cu ce gresesc,dar banuiesc ca este o greseala atunci cand apelez functia prim.
As vrea, daca se poate, sa imi explice si mie cineva, cum trebuie sa fac,de citit am citit despre functii, am cautat si exercitii asemanatoare cu functii, dar nu gasesc... #include<stdio.h> #include<conio.h> void citire(int n,int x[]){ int i; for(i=0;i<n;i++){ printf("x[%d]=",i); scanf("%d",&x[i]); } } void afisare(int n,int x[]){ int i; for(i=0;i<n;i++){ printf("%d ",x[i]); } } int prim(int r){ int i,s=0; for(i=1;i<=r;i++){ if(r%i == 0){ s=s+1; } } return s; } int main(){ int x[100],n,m,r,s,i; printf("n="); scanf("%d",&n); citire(n,x); afisare(n,x); for(i=0;i<n;i++){ if( prim(x) == 2 ){ printf("%d este prim!",x[i]); } } getch(); return 0; } Am gasit greseala, era la ultimul for, trebuia: for(i=0;i<n;i++){ if( prim(x[i]) == 2 ){ printf("%d este prim!",x[i]); } }Dar nu inteleg de ce trebuie pus prim(x[i]) cand apelez functia si nu se pune prim(x)..Imi poate explica cineva? Edited by kent94, 31 January 2014 - 13:44. |
|
#11
Posted 31 January 2014 - 13:48
Pentru ca functia prim primeste un int ca parametru, nu un pointer/vector de int-uri.
|
#12
Posted 31 January 2014 - 13:49
if( prim(x) == 2 ){ printf("%d este prim!",x[i]); }Deci daca variabila s e egala cu 2 (adica daca 2 numere sunt prime) , doar atunci numarul e prim? Sper sa te ajute, varianta mea : #include <iostream> using namespace std; int prim (int nr) // verifica daca numarul e prim { int d; if (nr<2) return 0; else { for (d=2;d<=nr/2;d++) if (nr%d==0) return 0; return 1; } } int nr_prim (int n, int a[]) // cate numere prime sunt { int s=0; for (int i=1;i<=n;i++) if (prim(a[i])) s++; return s; } void prelucrare (int n, int a[]) { cout<< " Vectorul are "<< nr_prim (n,a) << " numere prime " << endl; } int main () { int n, i, a[30]; cout<<" n = "; cin>>n; cout<< " Vectorul = "; for (i=1;i<=n;i++) cin>>a[i]; prelucrare(n,a); return 0; } Daca nu intelegi ceva, nu ezita sa intrebi. Edited by Tarhi, 31 January 2014 - 13:50. |
#13
Posted 31 January 2014 - 13:51
Pentru ca X este vectorul, iar X[i] este elementul pe care il testezi, in prima faza tu testai doar denumirea vectorului, nu un element al sau. Si ti s-a mai zis in topic, este foarte ineficienta functia ta de testare a unui numar prim.
Alta cale: mergi cu un for de la 2 la radical din numarul testat, daca ai gasit un numar in acest interval la care sa se imparta exact nr. testat atunci el este prim. namespace, on 21 ianuarie 2014 - 20:18, said:
Poftim: bool primChk(int x) { for (int i = 2; i < sqrt(x); i++) { if (x%i == 0) { return 0; break; } } return 1; } @Tarhi: numarul este prim daca se imparte doar la el (s++ // s=1) si la 1 (s++ // s=2) . Asta e logica ... Edited by G1q, 31 January 2014 - 13:52. |
#14
Posted 31 January 2014 - 13:57
Quote @Tarhi: numarul este prim daca se imparte doar la el (s++ // s=1) si la 1 (s++ // s=2) . Asta e logica ... |
#15
Posted 31 January 2014 - 15:39
kent94, on 31 ianuarie 2014 - 13:26, said:
As vrea, daca se poate, sa imi explice si mie cineva, cum trebuie sa fac,de citit am citit despre functii, am cautat si exercitii asemanatoare cu functii, dar nu gasesc... O functie trebuie sa faca un lucru, atat. Tu insa incerci sa faci prea multe lucruri deodata. Pana sa verifici cate valori dintr-un vector sunt prime, faci o functie care verifica daca o valoare e prima sau nu, functie careia ii dai o valoare drept parametru si care returneaza 0 sau 1 (fals, adevarat) daca acel parametru e prim sau nu. Abia dupa ce ai functia asta ce iti da raspunsul pentru un numar, n-ai decat sa scrii alta care primeste un vector drept parametru si care o apeleaza pe prima pentru fiecare valoare din vector. |
|
#16
Posted 03 February 2014 - 19:54
[ https://www.youtube-nocookie.com/embed/HvMSRWTE2mI?feature=oembed - Pentru incarcare in pagina (embed) Click aici ]
|
#17
Posted 04 February 2014 - 00:05
MarianG, on 03 februarie 2014 - 19:54, said:
[ https://www.youtube-nocookie.com/embed/HvMSRWTE2mI?feature=oembed - Pentru incarcare in pagina (embed) Click aici ] Da, dar asa cum zice si el intr-un video anterior e mai greu de implementat decat http://en.wikipedia...._primality_test [ https://www.youtube-nocookie.com/embed/jbiaz_aHHUQ?feature=oembed - Pentru incarcare in pagina (embed) Click aici ] |
#18
Posted 04 February 2014 - 07:16
Tarhi, on 31 ianuarie 2014 - 13:49, said: if( prim(x) == 2 ){ printf("%d este prim!",x[i]); }Deci daca variabila s e egala cu 2 (adica daca 2 numere sunt prime) , doar atunci numarul e prim? dani.user, on 31 ianuarie 2014 - 15:39, said:
Pana sa verifici cate valori dintr-un vector sunt prime |
Anunturi
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users