Pagini recente » Cod sursa (job #2858608) | Cod sursa (job #1559587) | Cod sursa (job #801563) | Clasamentul arhivei de probleme | Cod sursa (job #1714027)
#include <fstream>
#include <iostream>
using namespace std;
ifstream in("gfact.in");
ofstream out("gfact.out");
int pas=1<<30,p,q;
int fact[1000000];
int putere(int,int);
int nr(int,int,int);
int main()
{
int i=0,d=2,cop,m,fmax=-1;
in >> p >> q;
cop=p;
for(;d*d<=cop;++d)
while(cop%d==0)
{
cop/=d;
fact[d]++;
m=d;
}
if(cop>1)
{
fact[cop]++;
m=cop;
}
cout << m << endl;
for(i=2;i<=m;++i)
{
int j=0;
if(fact[i])
while(pas)
{
if(nr(j+pas,i,fact[i])<=q)
j+=pas;
cout << j << "\n";
pas/=2;
}
if(j>fmax) fmax=j;
cout << fmax << endl;
}
out << --fmax;
return 0;
}
int nr(int n,int nr,int put)
{
int div=0,aa;
aa=putere(nr,put);
while(n>=aa)
{
div+=n/aa;
n/=aa;
//cout << n << " " << aa << endl;
// cout << n << " " << put << "\n";
}
return div;
}
int putere(int baza,int exponent)
{
int nr=1;
while(exponent)
{
nr*=baza;
exponent--;
}
return nr;
}