Cod sursa(job #80340)

Utilizator gabitzish1Gabriel Bitis gabitzish1 Data 27 august 2007 14:46:28
Problema Zero 2 Scor 53
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include<stdio.h>
#include<math.h>

long long n, b, f, nr, ex, min, fminim;

int prim(long long x)
{
  if (x==1 || x==0) return 0;
  if (x==2) return 1;
  for (long long i=3; i<=x/2; i+=2)
    if (x%i==0) return 0;
  return 1;
}

void descomp(long long x)
{
  long long y=x; min=1000;
  if (y%2==0)
    {
      f=2;ex=0;
      while (y%2==0) { y/=2; ex++;}
      min=ex;
      fminim=2;
    }
  for (long long i=3; i<=y; i+=2)
    {
      if (y%i==0)
	if (prim(i))
	  {
	    ex=0;
	    f=i;
	    while (y%i==0) { y/=i; ex++;}
	    fminim=f; min=ex;
	  }
    }
}

long long nrz(long long x)
{
  long long p=1, contor=0;
  while (pow(fminim,p)<=x) contor+=(x/pow(fminim,p++));
  return contor;
}

int main()
{
  long long i,z,k,p;
  freopen("zero2.in","r",stdin);
  freopen("zero2.out","w",stdout);
  long long nr, contor=0;
  for (z=1; z<=10; z++)
    {
      scanf("%lld %lld",&n, &b);
      descomp(b);
      contor=0;
      k=floor(n/fminim)-1;	
      for (p=1; p<=min; p++) contor+=(k*(k+1)/2*pow(fminim,p) + (k+1)*(n-(k+1)*pow(fminim,p)+1));
    //  for (i=1; i<=n; i++) contor+=nrz(i);
      printf("%lld\n",contor);
    }
  return 0;
}