Cod sursa(job #1302745)

Utilizator refugiatBoni Daniel Stefan refugiat Data 27 decembrie 2014 11:39:04
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 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;j*i<=nmax;j=j+2)
                ciur[i*j]=1;
        }
    }
}
long long sum(long long b,int e)
{
    long long sum=0,mod=9973;
    while(e>0)
    {
        sum=(sum*b+1)%mod;
        --e;
    }
    return sum;
}
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=0,s=n/2,d=1,x=1,c;
    while(prime[i]<=s&&n>1)
    {
        c=0;
        while(n%prime[i]==0)
        {
            n=n/prime[i];
            ++c;
        }
        d=(d*(c+1))%9973;
        x=(x*sum(prime[i],c+1))%9973;
        ++i;
    }
    if(n!=1)
    {
        d=(d*2)%9973;
        x=(x*(n+1))%9973;
    }
    fprintf(so,"%lli %lli\n",d,x);
}
}