Cod sursa(job #2230676)

Utilizator giotoPopescu Ioan gioto Data 10 august 2018 23:36:54
Problema Zero 2 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <bits/stdc++.h>
using namespace std;

inline long long legendre(int x, int y){
    long long p = y, Sol = 0;
    while(p <= x) {
        int r = x / p;
        Sol = Sol + 1LL * p * (1LL * r * (r + 1) / 2);
        int rest = (x + 1) % p;
        if(rest > 0) Sol = Sol - 1LL * r * (p - rest);
        p = p * y;
    }
    return Sol;
}
inline long long solve(int x, int y){
    long long Sol = (1LL << 63) - 1;
    int d = 2;
    while(d * d <= y){
        if(y % d == 0){
            int cnt = 0;
            while(y % d == 0) y = y / d, ++cnt;
            Sol = min(Sol, legendre(x, d) / cnt);
        }
        ++d;
    }
    if(y > 1) Sol = min(Sol, legendre(x, y));
    return Sol;
}
int main()
{
    freopen("zero2.in", "r", stdin);
    freopen("zero2.out", "w", stdout);

    int t = 10;
    while(t--){
        int x, y;
        scanf("%d%d", &x, &y);
        printf("%lld\n", solve(x, y));
    }

    return 0;
}