Clasa a V-a lecția 6 S8
From Algopedia
Jump to navigationJump to search
Lectie
Divizorii unui numar
Afisarea divizorilor unui numar in ordine crescatoare
Varianta1:
#include <stdio.h>
int main() {
int n, d;
scanf( "%d", &n );
printf( "Divizorii lui %d sunt:", n );
d = 1;
while ( d <= n ) {
if ( n % d == 0 )
printf( " %d", d );
d = d + 1;
}
printf( "\n" );
return 0;
}
Varianta2 optimizat:
#include <stdio.h>
#include <math.h>
int main() {
int n, d;
scanf( "%d", &n );
printf( "Divizorii lui %d sunt:", n );
//afisam intai divizorii mai mici strict decat sqrt( n )
d = 1;
while ( d * d <= n ) {
if ( n % d == 0 )
printf( "%d ", d );
d = d + 1;
}
d = sqrt( n );
while ( d * d >= 1 ) {
if ( n % d == 0 )
printf( "%d ", n / d );
d = d - 1;
}
printf( "\n" );
return 0;
}
Suma tuturor divizorilor unui numar
#include <stdio.h>
int main(){
long long n, s, d;
scanf("%lld", &n);
s = 0;
d = 1;
while( d * d < n ){ // ne oprim cu d pana in radicalul numarului n
if( n % d == 0 )
s = s + d + n / d; // adaugam la suma si pe d si perechea sa de dupa radical
d = d + 1;
}
// aici d va fi fie egal cu radical din n daca n e patrat perfect, fie mai mare decat radical din n
if( d * d == n ) // daca n e patrat perfect,
s = s + d; // vom adauga radical din n doar o data la suma
printf("%lld\n", s);
return 0;
}
Primalitate
#include <stdio.h>
int main() {
int n, d;
scanf( "%d", &n );
d = 2;
while ( d * d <= n && n % d > 0 )
d = d + 1;
if ( d * d > n && n > 1 )
printf( "%d este prim\n", n );
else
printf( "%d nu este prim\n", n );
return 0;
}
Test2
Test in pbinfo
Probleme
Divizorii unui numar:
- Suma Divizori teorie
- Suma divizori impari
- Numarul divizorilor Pari
- DivizoriPariInterval
- Pseudoperfect
Primalitate
Tema8 (Optionala)
- Rezolvati problemele din test
- Implementati problemele care v-au ramas nerezolvate din lista de mai sus
- Tema de halloween de groaza este doar pentru cei foarte avansati, ar trebui sa va ia o luna sa o terminati.