Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: 3 divizorii proprii-improprii  (Citit de 9573 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
SpiderMan
Nu mai tace
*****

Karma: -463
Deconectat Deconectat

Mesaje: 937



Vezi Profilul
« : Decembrie 15, 2009, 13:16:04 »

Am o problema de genul: sa se gaseasca toate nr. din intervalul [a,b] care sa aiba exact 3 divizori (improprii+proprii). Aceste numere sunt patralele perfecte de numere prime nu?(ex. 25(5^5),49(7^7).. si o idee de rezolvare plz(eu m-am gandit cu ciurul lui eratostene).Ms
« Ultima modificare: Decembrie 16, 2009, 19:30:11 de către Robert Simoiu » Memorat
wefgef
Nu mai tace
*****

Karma: 1049
Deconectat Deconectat

Mesaje: 3.008


razboinicu' luminii


Vezi Profilul
« Răspunde #1 : Decembrie 15, 2009, 13:30:37 »

Gasesti cel mai mic numar prim mai mare sau egal cu sqrt(a) - fie acesta p1.
Gasesti cel mai mare numar prim mai mic sau egal cu sqrt(b) - fie acesta p2.
Gasesti toate numerele prime din intervalul [p1, p2] si le afisezi patratele.
Memorat

omului i-au fost date instinctele pentru a supravietui, nu pentru a fi sclavul lor.
Mishu91
Nu mai tace
*****

Karma: 169
Deconectat Deconectat

Mesaje: 751



Vezi Profilul
« Răspunde #2 : Decembrie 15, 2009, 13:32:47 »

Da, numerele cu 3 divizori sunt patratele numerelor prime. Asta se poate demonstra pe baza faptului ca daca un numar se scrie ca a1b1*a2b2*...*anbn, atunci numarul de divizori ai numarului respectiv fi (b1+1)(b2+1)...(bn+1). Cum 3 este numar prim, atunci este evident ca numarul dat este patratul unui numar prim.
Memorat
SpiderMan
Nu mai tace
*****

Karma: -463
Deconectat Deconectat

Mesaje: 937



Vezi Profilul
« Răspunde #3 : Decembrie 15, 2009, 14:09:59 »

Bun am vazut p1,p2 si acum cum vad eu daca un numar este prim? eu m-am gandit cu ciurul lui e., dar trebuie sa verific divizorii lui 2 in colo, chiar daca radicalii incep de la 100 de exemplu .... e bine asa?


Mai precis
Cod:
program ciur2;
var a,b,i,j,p1,p2:longint;
    v:array[1..1000000] of longint;
    stop:boolean;
 begin
   write('a=');readln(a);
   write('b=');readln(b);
   if sqrt(a)=trunc(sqrt(a)) then
    p1:=trunc(sqrt(a))
   else
    p1:=trunc(sqrt(a))+1;
   p2:=trunc(sqrt(b));
   if p1>p2 then
    stop:=false
   else
    begin
     for i:=2 to p2 do
      for j:=2 to p2 div 2 do
       v[i*j]:=1;
     for i:=p1 to p2 do
      if v[i]=0 then
       begin
        stop:=true;
        write(sqr(i),' ');
       end;
    end;
     if not stop then
     writeln('Nu exista numere cu 3 divizori in intervalul [',a,',',b,']');
    readln;
 end.

[editat de moderator] daca tot stii sa-ti editezi mesajele, nu mai posta consecutiv
Scuze Smile
« Ultima modificare: Decembrie 16, 2009, 14:16:00 de către Robert Simoiu » Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines