Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Centrala Ariston Cares Premium 24...

La multi ani @Klasse!

La multi ani @shmecherul!

pareri ipad 6-2018- flip
 Cum au aparut supermarketurile in...

Campanii mincinoase Carrefour

Tv toshiba defect

touchscreen navigatie stricat
 bonsai - de unde?

Resetare Bonus Malus

Unitatea optica DVD-rw absenta pe...

Problema configurare Wireguard
 Dozatoare de apa, cu alimentare d...

Intarziere aterizare avioane

Accident masina reparata pe CASCO

Probleme Ginseng Microcarpa
 

Algoritm numar prim

- - - - -
  • Please log in to reply
10 replies to this topic

#1
cr1s71_13

cr1s71_13

    Member

  • Grup: Members
  • Posts: 926
  • Înscris: 15.09.2007
E vorba despre un subprogram, nu imi mai aduc foarte bine aminte problema, cerea sa se verifice daca un numar este prim.

int prim (int x)
{
int i, y=0;
for (i=2;i<=x/2;i++)
if (x%i!=0)
y=1;
return y;
}

Stiu ca mai e o posibilitate, atunci cand consideram numarul prim, il initializam cu 1 si scriem  if (x%i==0) ... y=1; Ma intereseaza doar daca rezolvarea facuta de mine este corecta

#2
msmihai

msmihai

    Senior Member

  • Grup: Senior Members
  • Posts: 5,271
  • Înscris: 02.09.2006
da, merge , dar asa

[b]int[/b] prim (int x)
{
[b]int[/b] i, y[b]=[/b]1; // presupui ca numarul e prim
for (i=2;i<=x/2;i++)
 if (x%i[b] ==[/b]0) { y=0; break;} // am gasit deja un divizor, nu are sens sa continuam
return y; // intoarcem 1 sau 0
}

Edited by msmihai, 28 October 2009 - 16:20.


#3
SoR!n

SoR!n

    Active Member

  • Grup: Members
  • Posts: 1,772
  • Înscris: 29.12.2006
In exemplul dat de tine, orice numar < 5 ai introduce, iti returneaza 1.

int prim (int x)
{
    int i, y=1;
    for (i=2;i<=sqrt(x);i++) //daca numarul este prim, dupa radical din nr nu mai gaseste sigur nimic.
       if (x%i==0)
            y=0;
    return y;
}

msmihai a fost mai rapid. :P

Edited by SoR!n, 28 October 2009 - 16:23.


#4
cr1s71_13

cr1s71_13

    Member

  • Grup: Members
  • Posts: 926
  • Înscris: 15.09.2007
Multumesc mult !
Da, stiam faza cu "presupui ca numarul este prim ..." dar ma interesa doar daca cum am zis eu e corect, am gandit exact invers: presupunem ca numarul nu este prim, si apoi daca nu gasim niciun divizor returneaza valoarea 1.

#5
Ph@ntom

Ph@ntom

    Member

  • Grup: Members
  • Posts: 342
  • Înscris: 31.07.2007
sau mai elegant si mai scurt:
int prim(int x)
{
	  for(int i = 2; i <= sqrt(x); i++)
			if(i % 2 > 0 && x % i == 0)
				  return 1;
	  return 0;
}

Edited by Ph@ntom, 29 October 2009 - 15:33.


#6
NumeDeCod

NumeDeCod

    Active Member

  • Grup: Senior Members
  • Posts: 1,544
  • Înscris: 11.03.2005

 Ph@ntom, on 29th October 2009, 15:32, said:

sau mai elegant si mai scurt:
int prim(int x)
{
	  for(int i = 2; i <= sqrt(x); i++)
			if(i % 2 > 0 && x % i == 0)
				  return 1;
	  return 0;
}
O fi scurt, dar nu e deloc elegant sa recalculezi radacina patrata a aceluiasi numar de sqrt(n) ori.

#7
Ph@ntom

Ph@ntom

    Member

  • Grup: Members
  • Posts: 342
  • Înscris: 31.07.2007
era gresita solutia care am dat-o ma scuzati,trebuia:
int prim(int x)
{
	for(int i = 2; i <= int(sqrt(x)); i++)
		if(x % i == 0)
			return false;
	return true;
}

Edited by Ph@ntom, 29 October 2009 - 21:08.


#8
edy_3dz

edy_3dz

    Rau sau bun

  • Grup: Senior Members
  • Posts: 3,241
  • Înscris: 30.08.2008
nu era gresit, NumeDeCod zicea ca in loc de i <= sqrt(x) ar fi mai bine sa folosesti i*i<=x, evitand astfel apelul functiei sqrt() de multe ori.

#9
adrian93

adrian93

    Active Member

  • Grup: Members
  • Posts: 1,740
  • Înscris: 29.10.2009
Nu ar fi mai eficient daca am adauga o conditie ca atunci cand intalneste primul numar cu care este divizibil, programul sa se opreasca?
adik ceva de genul:

int prim(int x)
{int i,[b]p=1[/b];
if (x==0 || x==1) p=0; \\asta ma rog nu prea conteaza
	for(int i = 2; i <= int(sqrt(x)) [b]&&p[/b]; i++)
		if(x % i == 0)
		   p=0;
	return p;
}


Apropo. Salut, tuturor. Sunt nou pe forum :D.

#10
koltzu

koltzu

    Member

  • Grup: Members
  • Posts: 445
  • Înscris: 16.07.2006
int Prim(long n)
{  long i;
	if(n==1||n==0) return 0;
	if(n>2&&n%2==0) return 0;
	for(i=3;i*i<n;i=i+2)
		 if(n%i==0)
			  return 0;
	return 1;
}


#11
msmihai

msmihai

    Senior Member

  • Grup: Senior Members
  • Posts: 5,271
  • Înscris: 02.09.2006

 NumeDeCod, on 29th October 2009, 16:54, said:

O fi scurt, dar nu e deloc elegant sa recalculezi radacina patrata a aceluiasi numar de sqrt(n) ori.

doar ca o paranteza, Visual Studio optimizeaza codul respectiv si nu recalculeaza ... GCC-ul nu face asta .

Anunturi

Second Opinion 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

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate