Cod sursa(job #1302795)

Utilizator refugiatBoni Daniel Stefan refugiat Data 27 decembrie 2014 12:31:57
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 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;
    int i,c,d=1,s=1,mod=9973;
    long long r=(long long)sqrt(n),p;
    for(i=0;prime[i]<=r;++i)
    {
        if(n%prime[i]==0)
        {
            c=0;
            p=prime[i];
            while(n%prime[i]==0)
            {
                ++c;
                p=p*prime[i];
                n=n/prime[i];
            }
            d=(d*(c+1))%mod;
            s=(s*(p-1LL)/(prime[i]-1LL))%mod;
        }
    }
    if(n!=1)
    {
        d=(d*2)%mod;
        s=(s*(n+1))%mod;
    }
    fprintf(so,"%i %i\n",d,s);
}
}