Cod sursa(job #928275)
Utilizator | Data | 26 martie 2013 13:10:56 | |
---|---|---|---|
Problema | Pascal | Scor | 30 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 3.63 kb |
#include <iostream>
#include <fstream>
using namespace std;
long long R, S, D, Nr2, Nr3, Nr5;
long long Legendre( long long numar, long long fact ){
long long s = 0;
while ( numar >= fact )
s += numar / fact,
numar /= fact;
return s;
}
void rezolva(){
if ( R % 2 ){
for ( long long i = 1; i <= (R + 1) / 2; ++i ){
Nr2 = Legendre( R, 2) - Legendre( i, 2) - Legendre( R - i, 2);
Nr3 = Legendre( R, 3) - Legendre( i, 3) - Legendre( R - i, 3);
Nr5 = Legendre( R, 5) - Legendre( i, 5) - Legendre( R - i, 5);
switch( D ){
case 2:
if ( Nr2 )
S++;
break;
case 3:
if ( Nr3 )
S++;
break;
case 4:
if ( Nr2 > 1 )
S++;
break;
case 5:
if ( Nr5 )
S++;
break;
case 6:
if ( Nr2 && Nr3 )
S++;
break;
default: break;
}
}
S <<= 1;
}
else{
for ( long long i = 1; i < R / 2; ++i ){
Nr2 = Legendre( R, 2) - Legendre( i, 2) - Legendre( R - i, 2);
Nr3 = Legendre( R, 3) - Legendre( i, 3) - Legendre( R - i, 3);
Nr5 = Legendre( R, 5) - Legendre( i, 5) - Legendre( R - i, 5);
switch( D ){
case 2:
if ( Nr2 )
S++;
break;
case 3:
if ( Nr3 )
S++;
break;
case 4:
if ( Nr2 > 1 )
S++;
break;
case 5:
if ( Nr5 )
S++;
break;
case 6:
if ( Nr2 && Nr3 )
S++;
break;
default: break;
}
}
int i = R / 2;
Nr2 = Legendre( R, 2) - Legendre( i, 2) - Legendre( R - i, 2);
Nr3 = Legendre( R, 3) - Legendre( i, 3) - Legendre( R - i, 3);
Nr5 = Legendre( R, 5) - Legendre( i, 5) - Legendre( R - i, 5);
S <<= 1;
switch( D ){
case 2:
if ( Nr2 )
S++;
break;
case 3:
if ( Nr3 )
S++;
break;
case 4:
if ( Nr2 > 1 )
S++;
break;
case 5:
if ( Nr5 )
S++;
break;
case 6:
if ( Nr2 && Nr3 )
S++;
break;
default: break;
}
}
}
void citire(){
ifstream f("pascal.in");
f >> R >> D;
f.close();
}
void afis(){
ofstream g("pascal.out");
g << S << "\n";
g.close();
}
int main(){
citire();
rezolva();
afis();
return 0;
}