Cod sursa(job #2454857)

Utilizator verde.cristian2005Verde Flaviu-Cristian verde.cristian2005 Data 9 septembrie 2019 23:59:05
Problema Suma si numarul divizorilor Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include <fstream>
using namespace std;
ifstream in("ssnd.in");
ofstream out("ssnd.out");
const int N=1000000;
bool ciur[N+1];
long long prime[78500];
int cnt;
void desc(long long n)
{
    int d=1,cnt,rez=1;
    long long rez1=1,x;
    while(1LL*prime[d]*prime[d]<=n)
    {
        if(n%prime[d]==0)
        {
            cnt=0;
            x=1;
            while(n%prime[d]==0)
            {
                n/=prime[d];
                x=x*prime[d];
                cnt++;
            }
            rez=rez*(cnt+1);
            rez1=rez1*(x*prime[d]-1)/(prime[d]-1);
        }
        d++;
    }
    if(n!=1)
    {
        rez*=2;
        rez1*=(n+1);
    }
    out<<rez<<" "<<rez1<<'\n';
}
int main()
{
    int n,i,d;
    long long k;
    prime[++cnt]=2;
    for(i=4; i<=N; i+=2)
        ciur[i]=1;
    for(i=3; i*i<=N; i+=2)
        if(!ciur[i])
        {
            prime[++cnt]=i;
            for(d=i*i; d<=N; d+=2*i)
                ciur[d]=1;
        }
    for(; i<=N; i+=2)
        if(!ciur[i])
            prime[++cnt]=i;
    in>>n;
    for(i=1; i<=n; i++)
    {
        in>>k;
        desc(k);
    }
    return 0;
}