Cod sursa(job #2602338)

Utilizator alex2209alexPavel Alexandru alex2209alex Data 16 aprilie 2020 18:22:10
Problema Pascal Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.92 kb
#include <bits/stdc++.h>

using namespace std;
ifstream f("pascal.in");
ofstream g("pascal.out");
char ap[5000001],ap2[5000001];
int main()
{
    int n,d;
    f >> n >> d;
    if(n <= 1)
    {
        g << 0;
        return 0;
    }
    if(d == 2 or d == 3 or d == 5)
    {
        int p = d;
        int nr = 0;
        while(p <= n)
        {
            ap[p] = ++nr;
            for(int i = p + p; i <= n; i += p)
                ap[i] = nr;
            p *= d;
        }
        long long put = 0;
        int raspuns = 0;
        for(int i = 1; i <= n; ++i)
        {
            put += ap[n - i + 1] - ap[i];
            if(put)
                raspuns++;
        }
        g << raspuns;
    }
    else if(d == 4)
    {
        int p = 2;
        int nr = 0;
        while(p <= n)
        {
            ap[p] = ++nr;
            for(int i = p + p; i <= n; i += p)
                ap[i] = nr;
            p *= 2;
        }
        long long put = 0;
        int raspuns = 0;
        for(int i = 1; i <= n; ++i)
        {
            put += ap[n - i + 1] - ap[i];
            if(put >= 2)
                raspuns++;
        }
        g << raspuns;
    }
    else
    {
        int p = 2;
        int nr = 0;
        while(p <= n)
        {
            ap[p] = ++nr;
            for(int i = p + p; i <= n; i += p)
                ap[i] = nr;
            p *= 2;
        }
        p = 3;
        nr = 0;
        while(p <= n)
        {
            ap2[p] = ++nr;
            for(int i = p + p; i <= n; i += p)
                ap2[i] = nr;
            p *= 3;
        }
        long long put = 0,put2;
        int raspuns = 0;
        for(int i = 1; i <= n; ++i)
        {
            put += ap[n - i + 1] - ap[i];
            put2 += ap2[n - i + 1] - ap2[i];
            if(put && put2)
                raspuns++;
        }
        g << raspuns;
    }
    return 0;
}