Cod sursa(job #1205950)

Utilizator tudi98Cozma Tudor tudi98 Data 8 iulie 2014 15:23:17
Problema Pascal Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <fstream>
using namespace std;

struct P{int x,y,z;};

int pow(int n,int d){
    int p=0;
    while(n%d==0){
        n/=d;
        p++;
    }
    return p;
}

int main(){

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

    int r,d,div=0;
    f >> r >> d;
    P *app_f = new P[r+1];
    app_f[0].x=app_f[0].y=app_f[0].z=0;
    for(int i=1;i<=r;i++){
        if(d==2 || d==4 || d==6)
            app_f[i].x=app_f[i-1].x+pow(i,2);
        if(d==3 || d==6)
            app_f[i].y=app_f[i-1].y+pow(i,3);
        if(d==5)
            app_f[i].z=app_f[i-1].z+pow(i,5);
    }
    for(int i=1;i<=r/2;i++){
        int two=app_f[r].x-app_f[r-i].x-app_f[i].x;
        int three=app_f[r].y-app_f[r-i].y-app_f[i].y;
        int five=app_f[r].z-app_f[r-i].z-app_f[i].z;
        if((d==2 && two>0)||(d==3 && three>0)||(d==5 && five>0)||(d==4 && two>1)){
                if(i==r/2 && r%2==0) div++;
                else div+=2;
        }
        else if(d==6 && two>0 && three>0){
                if(i==r/2 && r%2==0) div++;
                else div+=2;
        }
    }
    delete[] app_f;
    g << div <<"\n";
    return 0;
}