Cod sursa(job #447814)

Utilizator mihaionlyMihai Jiplea mihaionly Data 1 mai 2010 10:27:10
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include <cstdio>
#include <math.h>
using namespace std;
#define ll long long
#define nmax 1000002
#define kmax 78950
#define MOD 9973
FILE *f=fopen("ssnd.in","r");
FILE *g=fopen("ssnd.out","w");
int t;
int p,d;
int np[kmax],k;
bool ok[nmax];
int card,sum;
ll n;
void ciur()
 {
 int i,j;
 for(i=2;i<=nmax-2;i++)
  {
  if(!ok[i])
   {
   ok[i]=true;
   np[++k]=i;
   for(j=2*i;j<=nmax-2;j+=i)
	   ok[j]=true;
   }
  }
 }
void solve()
 {
 int i;
 card=sum=1;
 for(i=1;np[i]<=n;i++)
  {
  if(n%np[i]==0)
   {
   p=np[i];
   d=0;
   while(n%np[i]==0)
    {
    n/=np[i];
    ++d;
    }
   card*=(d+1);
   sum*=((pow(p,d+1)-1)/(p-1));
   sum%=MOD;
   }
  }
 }
int main()
 {
 ciur();
 fscanf(f,"%d",&t);
 while(t)
  {
  fscanf(f,"%lld",&n);
  --t;
  solve();
  fprintf(g,"%d %d\n",card,sum);
  }
 return 0;
 }