Cod sursa(job #2024541)

Utilizator Marius7122FMI Ciltea Marian Marius7122 Data 20 septembrie 2017 20:17:45
Problema Sum Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <stdio.h>
#include <vector>

FILE *f1 = fopen("sum.in","r");
FILE *f2 = fopen("sum.out","w");

const int X = 100001;

std::vector<int> div[X]; ///div[i] = divizorii primi ai lui i
int i, j, n, y;
long long sol, x, s;

void generateDiv()
{
    for(i=2; i<=X/2; i++)
        if(div[i].size() == 0)  ///daca este prim
        {
            for(j=i; j<X; j+=i)
                div[j].push_back(i);
        }
}

///calculeaza suma primilor n term. unei p.a. cu a1 = r
inline int sum(int r, int n)
{
    return ((2*r + (n-1) * r) * n)/2;
}

int main()
{
    generateDiv();

    fscanf(f1,"%d",&n);

    while(n--)
    {
        fscanf(f1,"%lld",&x);

        sol = x * (2*x + 1);    ///suma primelor 2x numere naturale

        for(i=0;i<div[x].size();i++)
        {
            sol -= sum(div[x][i], x*2/div[x][i]);
        }

        for(i=0;i<div[x].size()-1;i++)
        {
            for(j=i+1;j<div[x].size();j++)
            {
                y = div[x][i] * div[x][j];
                sol += sum(y, x*2/y);
            }
        }

        fprintf(f2,"%lld\nf",sol);
    }

    return 0;
}