Cod sursa(job #1986908)

Utilizator ANdreeADiana27Alexa Andreea ANdreeADiana27 Data 29 mai 2017 11:27:24
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include <iostream>
#include <cmath>
#include <fstream>
using namespace std;
bool c[1000000];
int vp[78500];
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;
}
void Ciur(int n)
{
    int i,j;
    for(i=2;i<=n;i++)
        c[i]=1;
    for(i=2;i<=n;i++)
        if(c[i])
    {
        for(j=i+i;j<=n;j+=i)
            c[j]=0;
    }
}
int SumDiv(int n)
{
    int s=1+n,r=sqrt(n),d;
    if(n%2==0) s+=2+n/2;
    for(d=3;d<=r;d+=2)
        if(n%d==0&&c[d])
        s+=d+n/d;
    return s;
}
int main()
{
    ifstream f("ssnd.in");
    ofstream g("ssnd.out");
    int t,i,n;
    f>>t;
    for(i=1;i<=t;i++)
    {
        f>>n;
        Ciur(n);
        g<<FactPrim(n)<<" "<<SumDiv(n)<<endl;
    }
    f.close();
    g.close();
    return 0;
}