Cod sursa(job #26301)

Utilizator gcosminGheorghe Cosmin gcosmin Data 5 martie 2007 14:06:34
Problema Zero 2 Scor 92
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <stdio.h>

#define LL unsigned long long

int N, B;

int pr[20];
int nr[20];

LL get_nr(int x, int N)
{
	int aux = x, q, r;
	LL rez = 0;
	
	for (; x > 0 && x <= N; x *= aux) {
		q = N / x;
		r = N % x;
		rez += (LL) x * (q-1) * (q) / 2 + (LL) q * (r + 1);
	}
	
return rez;
}

int main()
{
	int T, i;
	LL jeg;
	
    freopen("zero2.in", "r", stdin);
    freopen("zero2.out", "w", stdout);
    
    for (T = 1; T <= 10; T++) {
        scanf("%d %d", &N, &B);

        pr[0] = 0;
        for (i = 2; i * i <= B; i++) {
            if (B % i == 0) pr[++pr[0]] = i, nr[pr[0]] = 0;
            while (B % i == 0) {
                  B /= i;
                  nr[pr[0]]++;
            }
        }
        if (B > 1) pr[++pr[0]] = B, nr[pr[0]] = 1;
        
        LL rez = ((LL)1 << 62);
        
        for (i = 1; i <= pr[0]; i++) {
            jeg = get_nr(pr[i], N);
            if (jeg / nr[i] < rez) rez = jeg / nr[i];
        }
        
        printf("%llu\n", rez);
    }
    
fclose(stdin);
fclose(stdout);
return 0;
}