Cod sursa(job #1986895)

Utilizator ANdreeADiana27Alexa Andreea ANdreeADiana27 Data 29 mai 2017 10:56:55
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.48 kb
#include <iostream>
#include <cmath>
#include <fstream>
using namespace std;

int FactPrim(int x)
{
    int nr=1,d=3,p=0,r;
    while(x%2==0)
    {
        x/=2;
        p++;
    }
    nr*=p+1;
    r=sqrt(x);
    while(d<=r)
    {
        p=0;
        while(x%d==0)
        {
            p++;
            x/=d;
        }
        if(p)
        {
            nr*=p+1;
            r=sqrt(x);
        }
        d+=2;
    }
    if(x!=1) nr*=2;
    return nr;
}
int Sdiv(int x)
{
    if(x==1) return 1;
    int s=1,d=3,p=0,r,prod;
    while(x%2==0)
    {
        x/=2;
        p++;
    }
    if(p)
    {
        p++;
        while(p)
        {
            s*=2;
            p--;
        }
        s--;
        p=1;
    }
    r=sqrt(x);
    while(d<=r)
    {
        p=0;
        prod=1;
        while(x%d==0)
        {
            p++;
            x/=d;
        }
        if(p)
        {
            p++;
            r=sqrt(x);
            while(p)
            {
                prod*=d;
                p--;
            }
            prod=(prod-1)/(d-1);
            s*=prod;
        }
        d+=2;
    }
    if(!p) s=x+1;
    else
    if(x!=1)
        s*=(d*d-1)/(d-1);
    return s%9973;
}
int main()
{
    ifstream f("ssnd.in");
    ofstream g("ssnd.out");
    int i,t,n;
    f>>t;
    for(i=1;i<=t;i++)
    {
        f>>n;
        g<<FactPrim(n)<<" "<<Sdiv(n)<<"\n";
    }
    f.close();
    g.close();
    return 0;
}