Cod sursa(job #1872407)

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