Cod sursa(job #1448265)

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

int main() {
	freopen("ssnd.in","r",stdin);
	freopen("ssnd.out","w",stdout);
	//freopen("input.in","r",stdin);
	for(int i=2;i<=1000000;++i) {
        if(!np[i]) {
            p.push_back(i);
            for(int j=2;j*i<=1000000;++j) {
                np[i*j] = 1;
            }
        }
    }
    scanf("%d",&T);
    while(T--) {
        S = 1;
        nr = 1;
        scanf("%d",&N);
        int x = N;
        for(int i=0;i<p.size();++i) {
            if(p[i]>=x) break;
            if(x%p[i]==0) {
                int k = 0;
                int P = p[i];
                while(x%p[i]==0) {
                    x/=p[i];
                    ++k;
                    P *= p[i];
                }
                P = (P-1)/(p[i]-1);
                S = (1LL*S*P)%MOD;
                nr = (1LL*nr*(k+1))%MOD;
            }
        }
        if(x!=1) {
            nr = (2*nr)%MOD;
            S = (1LL*(x+1)*S)%MOD;
        }
        printf("%d %d\n",nr,S);
    }
    return 0;
}