Pagini recente » Cod sursa (job #492801) | Cod sursa (job #2336802) | Cod sursa (job #2192104) | Cod sursa (job #1926176) | Cod sursa (job #29821)
Cod sursa(job #29821)
#include <fstream.h>
long a[2000];
char p[2000];
//p[i] == 0 if 2*i + 1 is prime
int getTheNumber(int n) {
int i, j, nr = 1,k=0;
for (i = 1; ((i * i) << 1) + (i << 1) <= n; i += 1) {
if ((p[i >> 3] & (1 << (i & 7))) == 0) {
for (j = ((i * i) << 1) + (i << 1); (j << 1) + 1 <= n; j += (i << 1) + 1) {
p[j >> 3] |= (1 << (j & 7));
}
}
}
for (i = 1; 2 * i + 1 <= n; ++i)
if ((p[i >> 3] & (1 << (i & 7))) == 0)
{a[++k]=2*i+1;}
}
main()
{ifstream in("gfact.in");
long p,q,r;
in>>p>>q;
getTheNumber(20000);
long b[1000][2];
long i=-1,j=-1,h;
while (p!=1) {i++; if (p%a[i]==0) {j++;b[j][0]=a[i];b[j][1]=0; while(p%a[i]==0) {p/=a[i];b[j][1]++;}}}
p=0;
for(long k=0;k<=j;k++) {i=0;h=0;while (h<b[k][1]*q) {r=++i;h++;while (r%b[k][0]==0) {r/=b[k][0];h++;}if (p<b[k][0]*h) p=b[k][0]*i; } }
ofstream out("gfact.out");
out<<p;
out.close();
in.close();
return 0;
}