Cod sursa(job #2017743)

Utilizator NToniBoSSNicolae Tonitza NToniBoSS Data 2 septembrie 2017 13:08:01
Problema Pascal Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <stdio.h>
int l1[5000001],l2[5000001];
int main()
{
    int r,d,ct=0,i,x,nr,z,d2=0;
    freopen("pascal.in","r",stdin);
    freopen("pascal.out","w",stdout);
    scanf("%d%d",&r,&d);
    if(d==4) d=2,ct=1;
    if(d==6) d=2,d2=3;
    x=d;
    while(x<=r)
    {
        for(i=x; i<=r; i+=x)
            ++l1[i];
        x*=d;
    }
    if(d2==3)
    {
        x=d2;
        while(x<=r)
        {
            for(i=x; i<=r; i+=x)
                ++l2[i];
            x*=d2;
        }
        d=6;
    }
    for(i=1; i<=r; ++i)
        l1[i]=l1[i-1]+l1[i];
    if(d==6)
        for(i=1; i<=r; ++i)
            l2[i]=l2[i-1]+l2[i];
    nr=0;
    z=(r-1)>>1;
    for(i=1; i<=z; ++i)
    {
        x=l1[r]-l1[i]-l1[r-i];
        if(ct) x>>=1;
        if(d<6 && x) nr+=2;
        if(d==6 && x && l2[r]-l2[i]-l2[r-i]) nr+=2;
    }
    if(!(r&1)){
        x=l1[r]-l1[i]-l1[r-i];
        if(ct==1) x>>=1;
        if(d<6 && x) ++nr;
        if(d==6 && x && l2[r]-l2[i]-l2[r-i]) ++nr;
    }
    printf("%d\n",nr);

    return 0;
}