Cod sursa(job #2705341)

Utilizator gasparrobert95Gaspar Robert Andrei gasparrobert95 Data 12 februarie 2021 13:49:20
Problema Pascal Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ifstream fin("pascal.in");
ofstream fout("pascal.out");
ll r, d, rez, put[5000005], put2[5000005];

int main() {
    fin >> r >> d;
    ll ori = 0, ori2 = 0, dc = d, d2 = 0;
    if (d == 6)
        d = 2, d2 = 3;
    if (d == 4)
        d = 2;
    for (ll i = d; i <= r; i *= d)
        for (ll j = i; j <= r; j += i)
            ++put[j];
    for (ll i = d2; d2 != 0 && i <= r; i *= d2)
        for (ll j = i; j <= r; j += i)
            ++put2[j];
    for (int i = 1; i <= r; ++i) {
        put[i] += put[i - 1];
        put2[i] += put2[i - 1];
    }
    bool ok = false;
    for (int j = 1; j <= r / 2; ++j) {
        ll p = put[r] - put[j] - put[r - j];
        if (dc == 6)
            p = min(put[r] - put[j] - put[r - j], put2[r] - put2[j] - put2[r - j]);
        if ((dc != 4 && p > 0) || (dc == 4 && p > 1)) {
            ++rez;
            if (j == r / 2)
                ok = true;
        }
    }
    rez *= 2;
    if (r % 2 == 0 && ok)
        --rez;
    fout << max((ll)0, rez);
    return 0;
}