Cod sursa(job #1017632)

Utilizator Aleks10FMI - Petrache Alex Aleks10 Data 28 octombrie 2013 00:21:14
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.59 kb
#include <iostream>
#include <fstream>
#include <cmath>

using namespace std;
char ap[1000001];
    ifstream f("ssnd.in");
    ofstream g("ssnd.out");

void ciur(){
    long long i,j;
    for(i=2;i<=1000000;i++){
        if(ap[i]==0)
            for(j=i+i;j<=1000000;j=j+i){
                ap[j]='1';
            }
    }
}

void calculeaza(int x){
    long long i,j;
    long long limit=sqrt(x);
    long long suma=1+x;
    long long cont=2;
    char vazut[1000001];
    if(ap[x]!='1'){
        g<<cont<<" "<<suma%9973<<'\n';
    }
    else{
        //initializare cu 0
        for(i=1;i<=1000000;i++)
            vazut[i]='0';
        //initializare done
        for(i=2;i<=sqrt(x);i++){
            if(ap[i]!='1' && x%i==0){
                suma=suma+i; //cout<<cont<<" "<<suma<<'\n';
                cont++;
                //cout<<i;
               // cout<<i<<'+';
                for(j=+i+i;j<=x/2;j=j+i){
                    //cout<<"avem "<<j<<"si a aparut?"<<vazut[j]<<"mm";
                    if(x%j==0 && vazut[j]!='1'){
                        suma=suma+j;
                        cont++;
                        vazut[j]='1';
                      //  cout<<j<<'+';
                    //  cout<<"avem "<<j<<"si a aparut?"<<vazut[j]<<"mm";
                    }
                }
            }
        }
        g<<cont<<" "<<suma%9973<<'\n';
    }
    //cout<<'\n';
}

int main()
{
    long long t,n,i;
    ciur();
    f>>t;
    for(i=0;i<t;i++){
        f>>n;
        //cout<<calculeaza(n)<<" ";
        calculeaza(n);
    }
    return 0;
}