Cod sursa(job #2230666)

Utilizator giotoPopescu Ioan gioto Data 10 august 2018 23:22:41
Problema Zero 2 Scor 98
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 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){
    int d = 2, Max = 0, p = 1, k = 0;
    while(d * d <= y){
        if(y % d == 0){
            int p2 = 1, cnt = 0;
            while(y % d == 0){
                y = y / d; ++cnt;
                p2 = p2 * d;
            }
            if(p2 > Max) Max = p2, p = d, k = cnt;
        }
        ++d;
    }
    if(y > 1) if(y > Max) Max = y, p = y, k = 1;
    return legendre(x, p) / k;
}
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;
}