Cod sursa(job #1831625)

Utilizator victorfloreaFlorea Victor Cristian victorflorea Data 18 decembrie 2016 14:15:14
Problema Suma si numarul divizorilor Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.3 kb
#include <iostream>
#include <fstream>
#include <math.h>
using namespace std;

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

#define MAX 1000005
#define MOD 9973

int prim[MAX/3] , k;
bool erathostene[MAX];

void era()
{
    for(int i=2;i<MAX-1;i++)
    {
        if(erathostene[i]) continue;

        for(int j=2*i;j<MAX;j+=i)
        {
            erathostene[j]=true;
        }

        prim[k++]=i;
    }
}

void afisare()
{   int d=2;
    long long int n;
    in>>n;
    int s=n+1 , x=sqrt(n);
    for(int i=0;i<k;i++)
    {
        //cout << prim[i] << '\n';
        if(prim[i]>=n/2) break;
        if(n%prim[i]==0)
        {
            s=(s+prim[i]) % MOD;
            d++;
           // cout << prim[i] << '\n';
           int j=2;
           while(j*prim[i]<=n/2) {
            if(n%(j*prim[i])==0) {
                for(int l=0;l<i;l++)
                    if(j*prim[i]%prim[l]==0) goto next;
               // cout << j * prim[i] << '\n';
                s=(s+j*prim[i])%MOD;
                d++;
            }
            next:
            j++;
           }
        }

    }
    out<<d<<' '<<s<<endl;
}

int main()
{   int t;
    in>>t;
    era();
    for(int i=1;i<=t;i++)
        afisare();
    in.close();
    out.close();
    return 0;
}