Cod sursa(job #993793)

Utilizator sebinechitasebi nechita sebinechita Data 4 septembrie 2013 14:24:54
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.39 kb
#include <iostream>
#include <fstream>
#include <cstring>
#include <string>
#include <climits>
#include <algorithm>
#include <cmath>
using namespace std;

ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
#define baza 1
#define MAX 1000005
#define MOD 9973
typedef long long int lli;

lli t,n, i, j;
lli a[MAX];

void ciur()
{
    a[0]=a[1]=1;
    int k=0;
    a[++k]=2;
    for(i=3;i<=MAX;i+=2)
    {
        if(!a[i])
        {
            for(j=i*i;j<=MAX;j+=i)
            {
                a[j]=1;
            }
            a[++k]=i;
        }
    }
  //  cout<<k<<"\n\n\n";
}



int main()
{
    ciur();

    fin>>t;
    for(lli ki=1;ki<=t;ki++)
    {
        lli numere=1;
        lli suma=1;
        fin>>n;
        lli l=sqrt(n);
        for(i=1;a[i]<=l;i++)
        {
            if(n%a[i]==0)
            {
                lli nr=1;
                lli cx=n;
                while(n%a[i]==0)
                {
                    nr++;
                    n/=a[i];
                }
                numere*=nr;
                suma*=(cx*a[i]/n-1);
                suma/=(a[i]-1);
                suma%=MOD;
                l=sqrt(n);
            }

        }
        if(n>1)
        {
            numere*=2;
            suma*=(n+1);
            suma%=MOD;

        }
        fout<<numere<<" "<<suma<<"\n";
    }



    return 0;
}