Cod sursa(job #787354)

Utilizator stefanzzzStefan Popa stefanzzz Data 13 septembrie 2012 11:08:43
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <fstream>
#include <vector>
#define RADN 1000001
#define NRM 9973
using namespace std;
ifstream f("ssnd.in");
ofstream g("ssnd.out");

int t,y,cnt;
long long n,S,p,x;
bool ciur[RADN+5];
vector<int> prime;

int main()
{
    int i,j,k;
    prime.push_back(2);
    for(i=3;i<=RADN;i+=2){
        if(!ciur[i]){
            prime.push_back(i);
            for(j=i;j<=RADN;j+=2*i)
                ciur[j]=1;}}
    f>>t;
    for(j=1;j<=t;j++){
        f>>n;
        S=p=1;
        for(i=0;i<prime.size()&&n>1;i++){
            if(!(n%prime[i])){
                x=y=prime[i];
                cnt=1;
                while(!(n%y)){
                    n/=y;
                    x*=y;
                    cnt++;}
                p*=cnt;
                x=(x-1)/(y-1);
                S=(S*x)%NRM;}}
        if(n>1){
            p*=2;
            S=(S*(n+1))%NRM;}
        g<<p<<' '<<S<<'\n';}
    f.close();
    g.close();
    return 0;
}