Cod sursa(job #1749379)

Utilizator valorosu_300Cristian Gherman valorosu_300 Data 28 august 2016 12:39:54
Problema Suma si numarul divizorilor Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <fstream>
using namespace std;
ifstream in("ssnd.in");
ofstream out("ssnd.out");
const int rb=1000005;
int ciur[rb];
int forta(int n,int p)
{
    int a=n,sol=1;
    for(int i=0;(1<<i)<=p;++i)
    {
        if((1<<i)&p)
            sol*=a;
        a*=a;
    }
    return sol;
}
void nrd(unsigned long long a,int nec)
{
    int i=0,p,nd=1,s=1,sus;
    while(i<nec && a>1){
        p=0;
        while((a%ciur[i])==0){
            a/=ciur[i];
            p++;
        }
        if(p)
        {
            sus=forta(ciur[i],p+1)-1;
            s*=(sus/(ciur[i]-1));
        }
        nd*=(p+1);
        i++;
    }
    if(a>1)
        nd*=2;
    out<<nd<<" "<<s%9973<<"\n";
}
int main()
{
    int n,loc=0;
    unsigned long long x;
    for(int i=2;i<=rb;i++)
        if(ciur[i]==0)
            for(int j=2;j*i<=rb;j++)
                ciur[j*i]=1;
    for(int i=2;i<=rb;i++)
        if(ciur[i]==0)
            ciur[loc++]=i;
    in>>n;
    for(int i=1;i<=n;i++)
    {
        in>>x;
        nrd(x,loc);
    }
}