Cod sursa(job #2358410)

Utilizator SsussuOrtoanu Raul Ssussu Data 28 februarie 2019 08:37:17
Problema Subsecventa de suma maxima Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.09 kb
#include <cstdio>
#include<fstream>
#define nmax 1000010
#define modulo 9973
using namespace std;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
bool v[nmax];
int prim[nmax/2],k=0;

void ssnd(int &suma,int &nr, long long n)
 {
    int p;
    long long q=1;
    nr=1;
    suma=1;
    for(int i=0;i<k && 1LL*prim[i]*prim[i]<=n;i++)
        {
        if(n%prim[i]) continue;
        p=1;
        q=prim[i];
        while (n%prim[i]==0)
        {
            n/=prim[i];
            p++;
            q*=prim[i];
        }
        nr*=p;
        suma=(suma*(q-1)/(prim[i]-1))%modulo;
    }
    if (n>1) {
        nr*=2;
        suma = (1LL*suma*(n+1)) % modulo;
    }

}

int main() {
    int t;
    long long n;
    int suma,nr;

    int i=2,j;
    while(i<nmax)
        {
        if(v[i]==0) {

            prim[k++]=i;

            for(j=i+i; j<nmax; j+=i)
                v[j]=1;
        }
        i++;
    }

    f>>t;


    for(i=0; i<t; i++)
        {
            f>>n;

        ssnd(suma,nr,n);
    g<<nr<<" "<<suma<<"\n";

    }

    return 0;
}