Cod sursa(job #1872708)

Utilizator lessanleonard savu lessan Data 8 februarie 2017 15:30:38
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.38 kb
#include <stdio.h>
#include <fstream>
#include <bitset>
using namespace std;
ofstream fout("ssnd.out");
bitset<1000001> ciur;
int i,n,cnt,nr;
long long b,a,sum;
bool ok;
int main()
{
    freopen("ssnd.in","r",stdin);
    scanf("%d",&n);
    for(i=3; i*i<=1000000; i+=2)
    {
        if(ciur[i]==0)
        {
            cnt = 0;
            while(i*i+cnt*i<=1000000)
            {
                ciur[i*i+cnt*i]=1;
                cnt++;
            }
        }
    }
    while(n)
    {
        cnt=0;
        scanf("%lld",&a);
        nr=b=1;
        while(a%2==0)
        {
            a/=2;
            cnt++;
            b*=2;
        }
        b*=2;
        b--;
        sum=b;
        nr*=(cnt+1);
        for(i=3; i*i<=a; i+=2)
        {
            ok=false;
            cnt=0;
            b=1;
            if(ciur[i]==0)
            {
                while(a%i==0)
                {
                    a/=i;
                    b=b*i;
                    cnt++;
                    ok=true;
                }
                if(ok)
                {
                    b*=i;
                    b--;
                    b=b/(i-1);
                    sum=sum*b;
                    nr*=(cnt+1);
                }
            }
        }
        if(a!=1)
        {
            nr*=2;
            sum=sum*((a*a-1)/(a-1));
        }
        fout<<nr<<" "<<sum%9973<<"\n";
        n--;
    }
    return 0;
}