Cod sursa(job #29821)

Utilizator UigresUigres Sergiu Uigres Data 9 martie 2007 23:58:38
Problema GFact Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#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;
}