Cod sursa(job #2251088)

Utilizator RaresMacoveiMacovei Rares-Stefan RaresMacovei Data 1 octombrie 2018 09:39:16
Problema Suma si numarul divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("ssnd.in");
ofstream fout("ssnd.out");

bool ciur[10000001];

void Ciur(){
    int i,j;
    ciur[0]=1,ciur[1]=1;
    for(i=4;i<=1000000;i+=2) ciur[i]=1;
    for(i=3;i*i<=1000000;i+=2)
        for(j=i*i;j<=1000000;j+=2*i) ciur[j]=1;
}

void Rezolva(int n){
    int nrd=1,d=3,p=0,s=1;
    while(n%2==0){++p;n/=2;}
    nrd*=(p+1);
    s=(pow(2,p+1)-1);
    while(n!=1){
        p=0;
        while(n%d==0){++p;n/=d;}
        nrd*=(p+1);
        s*=(pow(d,p+1)-1)/(d-1);
        if(d*d<=n) d+=2;
        else d=n;
        while(ciur[d]==1 && d*d<=n) d+=2;
        if(d*d>n) d=n;
    }
    fout<<nrd<<' '<<s<<'\n';
}

int main()
{
    Ciur();
    int n,x,i;
    fin>>n;
    for(i=0;i<n;++i){
        fin>>x;
        if(x<10000001 && ciur[x]==0) fout<<"2 "<<x+1<<'\n';
        else Rezolva(x);
    }
    return 0;
}