#include<iostream> #include<cstdio> #define MAX 40000 using namespace std; int crivo[MAX + 1]; int primos[MAX + 1]; int n_primos; void init_crivo() { n_primos = 0; crivo[0] = crivo[1] = 1; for (int i = 2; i <= MAX; i++) { if(!crivo[i]) { primos[n_primos++] = i; for (int j = i; i * j <= MAX; j++) crivo[i * j] = 1; } } } int NOD (int n) { if(n == 1) return 1; int r = 1, j; if(n <= MAX && !crivo[n]) return 2; for (int i = 0; primos[i] * primos[i] <= n; i++) { j = 0; while(n % primos[i] == 0) { n /= primos[i]; j++; } r *= (j + 1); if(n == 1) return r; } if(r == 1) return 2; return r * 2; } int main() { int t, L, H, P, D; init_crivo(); cin >> t; while(t--) { cin >> L >> H; D = P = 0; for (int i = L; i <= H; i++) { int nod = NOD(i); if(nod > D) D = nod, P = i; } printf("Between %d and %d, %d has a maximum of %d divisors.\n", L, H, P, D); } return 0; }
lunes, 16 de enero de 2012
294 - Divisors - UVA
Suscribirse a:
Enviar comentarios (Atom)
No hay comentarios:
Publicar un comentario