Cod sursa(job #2000874)

Utilizator Rodik_RodyRodica Vasilescu Rodik_Rody Data 14 iulie 2017 22:10:47
Problema Suma si numarul divizorilor Scor 10
Compilator c Status done
Runda Arhiva educationala Marime 1.18 kb
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define File_in "ssnd.in"
#define File_out "ssnd.out"
#define MAX 1000000
char ciur[MAX];
int P[500],k;
void ciurul_lui_Eratosthenes()
{
    int i,j;
    for ( i = 2; i*i <= 1000000; i++)
        if( ciur[i] == 0){
            P[++k]=i;
            for(j= i*i; j <= 1000000; j +=i)
                ciur[j] = 1;
    }

}
void ssnd (long long n,int *nr, int *s){
    int i,a,p;
    *nr = 1;
    *s = 1;
    for ( i= 1; i <= k && 1ll*P[i]*P[i]<n; i++ )
        if( n % P[i] == 0){
            a = 0;
            while(n%P[i]==0){
                n/=P[i];
                a++;
            }
            *nr=*nr*(a+1);
            *s= *s*((pow (P[i], a+1)-1)/(P[i]-1));
            *s%=9973;
        }
        if(n > 1) {
            *nr *= 2;
            *s = (1LL*(*s)*(n+1) %9973);
        }

}
int main()
{

    freopen(File_in, "r", stdin);
    freopen(File_out, "w", stdout);
    ciurul_lui_Eratosthenes();
    int t,i,j,nr,s;
    long long n;
    scanf("%d",&t);
    for ( i = 1; i <= t; i++)
    {
        scanf("%lld",&n);
        ssnd(n,&nr,&s);
        printf("%d %d\n",nr,s);

    }
}