Cod sursa(job #1337148)

Utilizator wGEORGEWGeorge Cioti wGEORGEW Data 8 februarie 2015 17:24:14
Problema Pascal Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <stdio.h>
#define MAXN 5000000
int f[MAXN+1], k[MAXN+1], l[MAXN+1], h[MAXN+1];
int main(){
    int n, i, d, j, ans, x;
    FILE *fin, *fout;
    fin=fopen("pascal.in", "r");
    fout=fopen("pascal.out", "w");
    fscanf(fin, "%d%d", &n, &d);
    if(d!=6){
        if(d==4){
            x=1;
            d/=2;
        }else{
            x=0;
        }
        for(i=d; i<=n; i*=d){
            for(j=i; j<=n; j+=i){
                f[j]++;
            }
        }
        k[0]=0;
        for(i=1; i<=n; i++){
            k[i]=k[i-1]+f[i];
        }
        ans=0;
        for(i=1; i<n; i++){
            ans+=(k[n]-k[i]-k[n-i]>x);
        }
    }else{
        for(i=2; i<=n; i*=2){
            for(j=i; j<=n; j+=2){
                f[j]++;
            }
        }
        k[0]=0;
        for(i=1; i<=n; i++){
            k[i]=k[i-1]+f[i];
        }
        for(i=3; i<=n; i*=3){
            for(j=i; j<=n; j+=3){
                l[j]++;
            }
        }
        h[0]=0;
        for(i=1; i<=n; i++){
            h[i]=h[i-1]+l[i];
        }
        ans=0;
        for(i=1; i<n; i++){
            ans+=((k[n]-k[i]-k[n-i]>0)&(h[n]-h[i]-h[n-i])>0);
        }
    }
    fprintf(fout, "%d\n", ans);
    fclose(fin);
    fclose(fout);
    return 0;
}