Cod sursa(job #2090131)

Utilizator RaduNRadu Negovan RaduN Data 17 decembrie 2017 17:07:24
Problema Pascal Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.36 kb
///ca si exercitiu de folosire a instructiunii define acest algoritm va contine oink in loc de oink
#include<bits/stdc++.h>
using namespace std;
#define oink int
ifstream f("pascal.in");
ofstream g("pascal.out");
oink r, d;
oink v1[5000002], v2[5000002];
oink main() {
    f>>r>>d;
    if(d!=4 && d!=6) {
        for(oink i=d; i<=r; i+=d) {
            oink z=i;
            while(z%d==0) {
                v1[i]++;
                z/=d;
            }
        }
        for(oink i=1; i<=r; i++){
            v1[i]+=v1[i-1];
        }
        oink cont=0;
        oink max1=r/2+r%2;
        for(oink i=0; i<max1; i++){
            if(v1[r]-v1[i]-v1[r-i]){
                cont+=2;
            }
        }
        if(r%2==0){
            if(v1[r]-v1[r/2]*2){
                cont++;
            }
        }
        g<<cont;
    } else if(d==4) {
        for(oink i=2; i<=r; i+=2) {
            oink z=i;
            while(z%2==0) {
                v1[i]++;
                z/=2;
            }
        }
        for(oink i=1; i<=r; i++){
            v1[i]+=v1[i-1];
        }
        oink cont=0;
        oink max1=r/2+r%2;
        for(oink i=0; i<max1; i++) {
            oink nr=v1[r]-v1[i]-v1[r-i];
            if(nr>=2){
                cont+=2;
            }
        }
        oink nr=v1[r]-2*v1[r/2];
        if(r%2==0){
            if(nr>=2){
                cont++;
            }
        }
        g<<cont;
    } else {
        for(oink i=2; i<=r; i+=2) {
            oink z=i;
            while(z%2==0) {
                ++v1[i];
                z/=2;
            }
        }
        for(oink i=3; i<=r; i+=3) {
            oink z=i;
            while(z%3==0) {
                ++v2[i];
                z/=3;
            }
        }
        for(oink i=1; i<=r; i++){
            v1[i]+=v1[i-1];
        }
        for(oink i=1; i<=r; i++){
            v2[i]+=v2[i-1];
        }
        oink cont=0;
        oink max1=r/2+r%2;
        for(oink i=0; i<max1; i++) {
            oink nr=v1[r]-v1[i]-v1[r-i];
            oink nr1=v2[r]-v2[i]-v2[r-i];
            if(nr>0 && nr1>0)
                cont+=2;
        }
        oink nr=v1[r]-2*v1[r/2];
        oink nr1=v2[r]-2*v2[r/2];
        if(r%2==0){
            if(nr>0 && nr1>0){
                cont++;
            }
        }
        g<<cont;
    }
    return 0;
}