Cod sursa(job #1302774)

Utilizator refugiatBoni Daniel Stefan refugiat Data 27 decembrie 2014 12:13:13
Problema Suma si numarul divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.23 kb
#include<iostream>
#include<fstream>
#include<stdio.h>
#include<vector>
#include<bitset>
#include<math.h>
#define nmax 1000003
using namespace std;
vector<long long> prime;
bitset<nmax> ciur;
void p()
{
    long long i,j;
    prime.push_back(2);
    for(i=3;i<=nmax;i=i+2)
    {
        if(ciur[i]==0)
        {
            prime.push_back(i);
            for(j=3;i*j<=nmax;j=j+2)
            {
                ciur[j*i]=1;
            }
        }
    }
}

int main()
{
    ifstream si;
    si.open("ssnd.in");
    FILE* so=fopen("ssnd.out","w");
int t,k;
si>>t;
p();
for(k=0;k<t;++k)
{
    long long  n;
    si>>n;
    long long i,c,sp,p,d=1,s=1,mod=9973;
    long long r=(long long)sqrt(n);
    for(i=0;prime[i]<=r;++i)
    {
        if(n%prime[i]==0)
        {
            c=0;
            p=1;
            sp=1;
            while(n%prime[i]==0)
            {
                ++c;
                p=(p*prime[i])%mod;
                n=n/prime[i];
            }
            p=(p*prime[i])%mod;
            d=(d*(c+1))%mod;
            s=(s*(p-1)/(prime[i]-1))%mod;
        }
    }
    if(n!=1)
    {
        d=(d*2)%mod;
        s=(s*(n+1))%mod;
    }
    fprintf(so,"%lli %lli\n",d,s);
}
}