Cod sursa(job #625619)

Utilizator florin_marius90Florin Marius Popescu florin_marius90 Data 25 octombrie 2011 08:29:16
Problema Suma si numarul divizorilor Scor 10
Compilator c Status done
Runda Arhiva educationala Marime 1.29 kb
#include <stdio.h>
#include <stdlib.h>

int main() 
{
    char v[1000001];
    //int n,cate = 0,i,j;
    
    //FILE *f = fopen("ciur.in","r");
    //freopen("ciur.out","w",stdout);
    
   // fscanf(f,"%i",&n);
    //fclose(f);
    int i,j;
    for (i=2; i <= 1000000; i++) {
        v[i] = '1';
    }
    
    for (i=2; i <= 1000000; i++) {
         if (v[i] == '1') {
        //       ++cate;
               for (j=i+i; j <= 1000000; j+=i) {
                   v[j] = '0';
               }
         }      
    }                  
    
    //printf("%i",cate);
    FILE *f = fopen("ssnd.in", "r"), \
         *g = fopen("ssnd.out", "w");
	 
    int n,nr,nrl,sum,mod = 9973;
    long long int x,p = 1;
    fscanf(f, "%i", &n);
    for (i = 0; i < n; i++)
    {
	fscanf(f,"%i", &x);
	j = 2;
	sum = 1;
	nr = 1;
	nrl = 0;
	p=1;
	
	while (x != 1)
	{//printf("x = %i\n",x);
	
	//    printf("j = %i", j);
	  if (x % j == 0)
	  {
	    x = x / j;
	    p *= j;
	    nrl++;
	    
	  }
	  else
	  {
	    nr *= (nrl+1) ;
	    sum *= ( 1LL*p * j -1)/(j - 1) % mod;
	    p = 1;
	    nrl = 0;
	    j++;
	    while (v[j] == '0') j++;
	  }
	  
	}
	nr *= (nrl+1) ;
	    sum *= (1LL *p * j -1)/(j - 1) % mod;
	    p = 1;
	    nrl = 0;
	
	fprintf(g, "%i %i\n", nr, sum);
	
      
    }
    fclose(f);
    fclose(g);
     
    return 0;
}