Cod sursa(job #2115352)

Utilizator GabiTulbaGabi Tulba-Lecu GabiTulba Data 26 ianuarie 2018 17:38:14
Problema Pascal Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <bits/stdc++.h>

#define INF 2140000000
#define MOD 1000000007
#define MaxN 5000005

using namespace std;

FILE*IN=fopen("pascal.in","r"),*OUT=fopen("pascal.out","w");

int R,D,Ans=0,d[3][MaxN];

int main()
{
    fscanf(IN,"%d%d",&R,&D);

    if(D%2==0)
    {
        for(int i=2;i<=R;i*=2)
        for(int j=i;j<=R;j+=i)
            d[0][j]++;
    }
    if(D%3==0)
    {
        for(int i=3;i<=R;i*=3)
            for(int j=i;j<=R;j+=i)
                d[1][j]++;
    }

    if(D%5==0)
    {
        for(int i=5;i<=R;i*=5)
            for(int j=i;j<=R;j+=i)
                d[2][j]++;
    }
    for(int i=1;i<=R;i++)
        d[0][i]+=d[0][i-1],d[1][i]+=d[1][i-1],d[2][i]+=d[2][i-1];
    for(int i=0;i<=R;i++)
    {
        if(D==2)Ans+=(d[0][R]-d[0][i]-d[0][R-i]>0);
        if(D==3)Ans+=(d[1][R]-d[1][i]-d[1][R-i]>0);
        if(D==5)Ans+=(d[2][R]-d[2][i]-d[2][R-i]>0);
        if(D==4)Ans+=(d[0][R]-d[0][i]-d[0][R-i]>1);
        if(D==6)Ans+=(d[0][R]-d[0][i]-d[0][R-i]>0)&&(d[1][R]-d[1][i]-d[1][R-i]>0);
    }
    fprintf(OUT,"%d",Ans);

    return 0;
}