Cod sursa(job #2439344)

Utilizator CuriosaurusIonita Lucian Andrei Curiosaurus Data 15 iulie 2019 18:12:56
Problema Suma si numarul divizorilor Scor 0
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.5 kb
#include <stdio.h>
#include <stdlib.h>

long a[1000000], b[1000000];
int k = 0;

void ciur()
{
    for(int i = 2; i <= 1000000; i++)
    {
        if(b[i] == 0)
        {
            b[i] = 1;
            for(int j = 2 * i; j <= 1000000; j = j + i)
                b[j] = 1;
            a[k++] = i;
        }
    }
}

void ssndf(int n, FILE **write)
{
    int i = 0, nr = 2, s = n + 1, ok;
    while(a[i] <= n / 2)
    {
        if(n % a[i] == 0)
        {
            nr++;
            s = s + a[i];
            int j = 2;
            while(j * a[i] < n)
            {
                if(n % (j * a[i]) == 0)
                {
                    ok = 1;
                    for(int l = 0; l < i; l++)
                        if(a[l] == j)
                        {
                            ok = 0;
                            break;
                        }
                    if(ok == 1)
                    {
                        nr++;
                        s = s + j * a[i];
                    }
                }
                j++;
            }
        }
        i++;
    }
    fprintf(*write, "%d %d\n", nr, s % 9973);
}
int main()
{
    FILE *read = fopen("ssnd.in", "r");
    FILE *write = fopen("ssnd.out", "w");

    int n;
    long  x;
    ciur();
    fscanf(read, "%d", &n);
    for(int i = 0; i < n; i++)
    {
        fscanf(read, "%li", &x);
        ssndf(x, &write);
    }

    fclose(read);
    fclose(write);
    return 0;
}