Cod sursa(job #1522746)
Utilizator | Data | 11 noiembrie 2015 22:37:48 | |
---|---|---|---|
Problema | Pascal | Scor | 50 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 2.5 kb |
#include <bits/stdc++.h>
using namespace std;
ifstream in("pascal.in");
ofstream out("pascal.out");
int n,d;
int main()
{
in>>n>>d;
in.close();
long long int nr = 0;
int fact1 = 0,fact2=0,fact=0;
for(int i = 0;i<=n/2;i++)
{
if((d==2) || (d==3) || (d==5))
{
fact = 0;
for(int j=d;j<=n;j*=d)
{
fact+= (n/j - ((n-i)/j + i/j));
if(fact > 0)
break;
}
if(fact > 0)
{
if(n%2==1)
nr+=2;
else
{
if(i==n/2)
nr+=1;
else
nr+=2;
}
}
}
else
if(d==4)
{
fact = 0;
for(int j=2;j<=n;j*=2)
{
fact+= (n/j - ((n-i)/j + i/j));
if(fact >=2)
break;
}
if(fact >= 2)
{
if(n%2==1)
nr+=2;
else
{
if(i==n/2)
nr+=1;
else
nr+=2;
}
}
}
else
if(d==6)
{
fact1 = 0;
fact2 = 0;
for(int j=2;j<=n;j*=2)
{
fact1+= (n/j - ((n-i)/j + i/j));
if(fact1 >=1)
break;
}
for(int j=3;j<=3;j*=3)
{
fact2+= (n/j - ((n-i)/j + i/j));
if(fact2 >=1)
break;
}
fact = min(fact1,fact2);
if(fact >= 1)
{
if(n%2==1)
nr+=2;
else
{
if(i==n/2)
nr+=1;
else
nr+=2;
}
}
}
}
out<<nr<<'\n';
out.close();
return 0;
}