Cod sursa(job #1017639)

Utilizator Aleks10FMI - Petrache Alex Aleks10 Data 28 octombrie 2013 00:48:38
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.74 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(long long x){
    long long i,j;
    long long limit=x/2;
    long long suma=1+x;
    long long cont=2;
    char vazut[1000001];
    if(limit>1000000)
        limit=1000000;
    if(x<1000000){
    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<=limit;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<=limit;j=j+i){
                  //  cout<<"avem "<<j<<"si a aparut?"<<vazut[j]<<"mm";
                    if(x%j==0){
                        if(j<1000000 && 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;
}