Cod sursa(job #1374548)

Utilizator vdorastieNegru Vlad vdorastie Data 5 martie 2015 09:56:31
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.37 kb
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
int a[80000];
int long long o=0, n, m, i, q, ok, l, k1, k2, v1, v2, u;
bool v[1000003];
void gen_ciur(int long long &o)
{
    int i, k;
    for(i=2; i<=1000003; i++)
    {
        if(v[i]==false)
        {
            v[i]=true;
            a[++o]=i;
            k=i+i;
            while(k<1000000)
                {
                    v[k]=true;
                    k=k+i;
                }
        }
    }
}
int main()
{
    ifstream fin("ssnd.in");
    ofstream fout("ssnd.out");
    fin>>n;
    gen_ciur(o);
    for(i=1; i<=n; i++)
    {
        fin>>m;
        q=1;
        ok=sqrt(m);
        k1=1;
        k2=1;
        u=0;
        while(a[q]<=ok)
        {
            if(m%a[q]==0)
            {l=0;
            v1=1;
            while(m%a[q]==0) {m/=a[q]; l++;}
            k1*=(l+1);
            while(l+1)
            {
                v1*=(a[q]);
                l--;
            }
            v1--;
            v2=(a[q]-1);
            v1=v1/v2;
            k2*=v1;
            u=1;
            }
            q++;

        }
        if(u==0)
        {
            k1=2;
            v1=m*m;
            v1--;
            v2=m-1;
            v1=v1/v2;
            k2=v1;
        }
        fout<<k1<<" "<<k2<<"\n";
    }
    return 0;
}