Cod sursa(job #808740)

Utilizator UnforgivenMihai Catalin Botezatu Unforgiven Data 7 noiembrie 2012 10:59:44
Problema Suma divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.27 kb
#include <iostream>
#include <stdio.h>
#include <math.h>
#define SIZE_MAX 1000000


using namespace std;


int main()
{
    FILE *input = fopen("sumdiv2.in","r");
    FILE *output = fopen("sumdiv2.out","w");
    int n;
    fscanf(input,"%d",&n);
    int maxim = -1;
    for (int i=0;i<2*n;i++)
    {
        int x;
        fscanf(input,"%d",&x);
        if (x > maxim) maxim = x;
    }
    long long sume[maxim];
    sume[1] = 1;
    for (int i=2;i<=maxim;i++)
    {
        int div = 2;
        int cpy = i;
        int nr = 0;
        long long suma = 1;
        while (cpy != 1)
        {
            nr = 0;
            while (cpy % div == 0)
            {
                cpy /= div;
                nr++;
            }
            if (nr != 0)
            {
                suma *= ( pow(div,nr+1) -1 ) / (div- 1);
            }
            div++;

        }
        sume[i] = suma + sume[i-1];
    }
    fclose(input);
    FILE *file = fopen("sumdiv2.in","r");
    fscanf(file,"%d",&n);
    for (int i=0;i<n;i++)
    {
        int x;
        int y;
        fscanf(file,"%d%d",&x,&y);
        fprintf(output,"%lld\n",sume[y]-sume[x-1]);
    }
    fclose(file);
    fclose(output);
    cout << "Hello world!" << endl;
    return 0;
}