Cod sursa(job #2387989)

Utilizator albucristianAlbu Cristian-Gabriel albucristian Data 25 martie 2019 16:01:40
Problema Suma si numarul divizorilor Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.4 kb
#include <fstream>
using namespace std;
int v[1000002],ciur[1000002];
int poww(int a,int b)
{
    int y=1;
    while(b>0)
    {
        if(b%2==1)
        {
            y=y*a;
            y%=9973;
            b--;
        }
        a=a*a;
        a%=9973;
        b/=2;
    }
    return y;
}
int main()
{
    int n,c,s,nr,x,a;
    ifstream in("ssnd.in");
    ofstream out("ssnd.out");
    for(int i=2;i<=1000000;i++)
    {
        if(v[i]==0)
        {
            for(int j=2*i;j<=1000000;j+=i)
            {
                v[j]=1;
            }
        }
    }
    c=0;
    for(int i=2;i<=1000000;i++)
    {
        if(v[i]==0)
            ciur[++c]=i;
    }
    in>>n;
    for(int i=1;i<=n;i++)
    {
        in>>x;
        if(v[x]==1)
        {
            int y=x;
            nr=s=1;
            for(int j=1;j<=c;j++)
            {
                if(ciur[j-1]*ciur[j-1]<=y)
                {
                    a=0;
                    while(x%ciur[j]==0)
                    {
                        x/=ciur[j];
                        a++;
                    }
                    nr=nr*(a+1);
                    s=s*((poww(ciur[j],a+1)-1)/(ciur[j]-1));
                }
                else
                    break;
            }
            out<<nr<<" "<<s<<"\n";
        }
        else
            out<<2<<" "<<x+1<<"\n";
    }
    return 0;
}