Cod sursa(job #51764)
Utilizator | Data | 16 aprilie 2007 19:38:28 | |
---|---|---|---|
Problema | Zero 2 | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 2.91 kb |
#include<fstream>
#include<math.h>
#define MIN 10000
using namespace std;
short int n,b,c[100],d[100],k,min;
int main()
{
ifstream fin("zero2.in");
ofstream fout("zero2.out");
int i,j,l,min,cont=0,aux = 0,p,z;
while(fin>>n>>b)
{
min = MIN;
if(b == 3 || b == 2)
aux = 1;
else
{
for(i = 2; i <= b/2; i++)
{
if(b%i != 0)
aux = 1;
if(b%i == 0)
{
aux = 0;
break;
}
}
}
if(aux == 1)
{
min = 0;
for(i = 2; i <= n; i++)
{
for(j = 1; j <= i; j++)
if(j%b == 0)
{
z = j;
while(z%b == 0)
{
min++;
z/=p;
}
}
}
}
if(aux == 0)
{
if(pow(sqrt(b),2)== b)
{
min = 0;
p = (int)sqrt(b);
for(i = 2; i <= n; i++)
{
for(j = 1; j <= i; j++)
if(j%p == 0)
{
z = j;
while(z%p == 0)
{
min++;
z/=p;
}
}
}
min=min/2;
}
if(pow(sqrt(b),2)!= b)
{
for(i = 2; i <= b/2; i++)
if(b%i == 0)
c[k++] = i;
for(i = 2; i <= n; i++)
{
for(j = 1; j <= i; j++)
{
for(l = 0; l < k; l++)
if(c[l] == j)
d[c[l]]++;
else
continue;
}
}
for(i = 1; i <= b/2; i++)
if(d[i] == 0)
cont = 1;
else
{
cont = 0;
break;
}
if(cont == 1)
min = 0;
else
{
for(i = 1; i <= b/2; i++)
if(d[i] != 0)
if(d[i] < min)
min = d[i];
for(i = 2; i <= k/2; i++)
{
c[i] = 0;
d[i] = 0;
}
}
}
}
fout<<min<<"\n";
}
fin.close();
fout.close();
return 0;
}