Cod sursa(job #2650132)

Utilizator redstonegamer22Andrei Ion redstonegamer22 Data 17 septembrie 2020 15:56:42
Problema Pascal Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.53 kb
#include <bits/stdc++.h>

using namespace std;

ifstream in("pascal.in");
ofstream out("pascal.out");

long long gfact(long long fact, int base)
{
    long long nr_div = 0;
    while(fact)
    {
        nr_div += fact / base; fact /= base;
    }

    return nr_div;
}

unsigned int precalc[5000005];
long long precalc2[5000005];

#pragma GCC optimize("O3")

int main()
{
    long long r; long long d; in >> r >> d;
    long long cnt = 0;
    int cutoff, initd = d;

    if(d == 4) cutoff = 1;
    else cutoff = 0;

    if(d == 6) d = 3;
    if(d == 4) d = 2;

    //for(int i = 0; i <= r; i++)
    //    precalc[i] = gfact(i, d);

    for(long long divs = d; divs <= r; divs*=d)
    for(long long index = divs; index <= r; index += divs)
        precalc[index] += 1;

    for(long long index = 1; index <= r; index++)
        precalc[index] += precalc[index-1];

    if(initd == 6) {
        for(long long divs = 2; divs <= r; divs*=2)
        for(long long index = divs; index <= r; index += divs)
            precalc2[index] += 1;

        for(long long index = 1; index <= r; index++)
            precalc2[index] += precalc2[index-1];
    }

    for(long long j = 0; j < r; j++)
    {
        if(precalc[r] - precalc[r-j] - precalc[j] > cutoff) {
            if(initd == 6) {
                if(precalc2[r] - precalc2[r-j] - precalc2[j] > 0) {
                    cnt++;
                }
            }
            else {
                cnt++;
            }
        }
    }

    out << cnt;
}