Cod sursa(job #1302827)

Utilizator refugiatBoni Daniel Stefan refugiat Data 27 decembrie 2014 13:03:50
Problema Suma si numarul divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include<iostream>
#include<fstream>
#include<stdio.h>
#include<vector>
#include<bitset>
#include<math.h>
#define nmax 1000003
using namespace std;
long long prime[nmax];
bitset<nmax> ciur;
int nrp=1;
void p()
{
    long long i,j;
    prime[0]=2;
    for(i=3;i<=nmax;i=i+2)
    {
        if(ciur[i]==0)
        {
            prime[nrp]=i;
            nrp=nrp+1;
            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();
cout<<nrp;
for(k=0;k<t;++k)
{
    long long  n;
    si>>n;
    int i,c,d=1,s=1,mod=9973;
    long long p;
    for(i=0; prime[i]*prime[i]<=n && i<nrp ;++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);
}
}