Cod sursa(job #1448278)

Utilizator timicsIoana Tamas timics Data 6 iunie 2015 15:45:17
Problema Suma si numarul divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include<stdio.h>
#include<vector>
#define MOD 9973
using namespace std;
int T,np[1000100],z,p[400100];
long long N,nr,S;

int main() {
	freopen("ssnd.in","r",stdin);
	freopen("ssnd.out","w",stdout);
	//freopen("input.in","r",stdin);
	p[++z] = 2;
    for(int i=3;i<=1000000;i+=2) {
        if(!np[i]) {
            p[++z] = i;
            for(int j=3;j*i<=1000000;++j) {
                np[i*j] = 1;
            }
        }
    }

    scanf("%d",&T);
    while(T--) {
        S = 1;
        nr = 1;
        scanf("%lld",&N);
        long long x = N;
        for(int i=1;i<=z;++i) {
            if(1LL*p[i]*p[i]>x) break;
            if(x%p[i]==0) {
                int k = 0;
                long long P = p[i];
                while(x%p[i]==0) {
                    x/=p[i];
                    ++k;
                    P *= p[i];
                }
                P = (P-1)/(p[i]-1);
                S = (S*P)%MOD;
                nr = (nr*(k+1))%MOD;
            }
        }
        if(x!=1) {
            nr = (2*nr)%MOD;
            S = ((x+1)*S)%MOD;
        }
        printf("%lld %lld\n",nr,S);
    }

    return 0;
}