Cod sursa(job #2790827)

Utilizator MilitaruMihaiMihaiMIlitaru MilitaruMihai Data 29 octombrie 2021 16:49:42
Problema Suma si numarul divizorilor Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.49 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
char ciur[1000001];
long long i,v[100000],t,k,m,n,s,nr,e,p,l,x,y,d;
int ecd(long long a,long long b,long long &x,long long &y)
{
    if (b==0)
    {
        x=1;
        y=0;
        return a;
    }
    long long x0,y0,d;
    d=ecd(b,a%b,x0,y0);
    x=y0;
    y=x0-(a/b)*y0;
    return d;
}
int main()
{

    ciur[0]=1;
    ciur[1]=1;
    for (i=2; i<=1000000; i++)
    {
        if (ciur[i]==0)
        {
            v[++t]=i;
            for (d=i*i; d<=1000000; d+=i)
                ciur[d]=1;
        }
    }

    fin>>k;
    m=9973;
    for (i=1; i<=k; i++)
    {
        fin>>n;
        d=1;
        s=1;
        nr=1;
        while (v[d]*v[d]<=n)
        {
            e=0;
            p=1;
            while (n%v[d]==0)
            {
                p=p*v[d];
                e++;
                n=n/v[d];
            }
            nr=nr*(e+1);
            if (e)
            {
                l=ecd(v[d]-1,m,x,y);
                l=x;
                while (l<0)
                    l=l+m;
                p=p*v[d];
                s=s*l*(p-1)%m;
            }
            d++;
        }
        if (n!=1)
        {
            nr=nr*2;
            l=ecd(n-1,m,x,y);
            l=x;
            while (l<0)
                l=l+m;
            s=s*l*(n*n-1)%m;
        }
        fout<<nr<<" "<<s<<'\n';
    }

    return 0;
}