Cod sursa(job #2631851)

Utilizator un_fes_galbendaniel guba un_fes_galben Data 1 iulie 2020 13:30:05
Problema Suma si numarul divizorilor Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.29 kb
#include <fstream>

using namespace std;
bool ciur[1000005];
int prime[1000005];
int main()
{
    ifstream cin("ssnd.in");
    ofstream cout("ssnd.out");
    ciur[0]=ciur[1]=1;
    for(int i=2;i*i<=1000000;i++)
    {
        if(ciur[i]==0)
        {
            for(int j=i*i;j<=1000000;j+=i)
            {
                ciur[j]=1;
            }
        }
    }
    int poz=0;
    for(int i=2;i<=1000000;i++)
    {
        if(ciur[i]==0)
        {
            prime[poz]=i;
            poz++;
        }
    }
    int n,cnt1=0,cnt2=0,cnt3=0;
    long long a;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>a;
        long long sum=1,d=prime[0],cnt=0,ca=a,put=1,poz=0,nrdiv=1;
        while(a>1&&1LL*d*d<=a)
        {
            cnt=0;
            put=1;
            while(a%d==0)
            {
                cnt++;
                a/=d;
                put*=d;
            }
            put*=d;
            nrdiv*=(cnt+1);
            if(cnt!=0)
            {
                sum*=(put-1)/(d-1);
            }
            poz++;
            d=prime[poz];
        }
        if(a>1)
        {
            put=1LL*a*a;
            sum*=(put-1)/(a-1);
            nrdiv*=2;
        }
        cout<<nrdiv<<" "<<sum%9973<<'\n';
    }
    return 0;
}