Cod sursa(job #1812930)

Utilizator stefdascalescuStefan Dascalescu stefdascalescu Data 22 noiembrie 2016 16:04:22
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.32 kb
#include<bits/stdc++.h>
#define max1 1000003
using namespace std;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
long long t,n,s,d,np;
bitset<max1>v;
long long v1[100002];
void ciur()
{
   np=1;
    v1[1]=2;
    for(int i=4;i<=max1;i+=2)
        v[i]=1;
    for(long long i=3;i<=max1;i+=2)
    {
        if(v[i]==0)
        {
            ++np;
            v1[np]=i;
            if(i*i<max1)
                for(long long j=i*i;j<=max1;j=j+i)
                    v[j]=1;
        }
    }
}
int main()
{
    f>>t;
    ciur();
    for(int i=1;i<=t;++i)
    {
        f>>n;
        long long n1=n;
        s=1;
        d=1;
        for(int j=1;v1[j]*v1[j]<=n;++j)
            if(n%v1[j]==0)
            {
                int nd=0;
                long long q=v1[j];
                while(n%q==0)
                {
                    ++nd;
                    n1/=v1[j];
                    q=q*v1[j];
                }
                d=d*(nd+1);
                s=s*(q-1)/(v1[j]-1);
            }
        if(n1>1)
        {
            if(n1==n)
                g<<2<<" "<<(n+1)%9973<<'\n';
            else{
                g<<d*2<<" ";
                g<<(s*(n1*n1-1)/(n1-1))%9973<<'\n';
            }
        }
        else
            g<<d<<" "<<s%9973<<'\n';
    }
    return 0;
}