Cod sursa(job #3360887)

Utilizator RegeleOu3433Calin V. Dragos Andrei RegeleOu3433 Data 17 iulie 2026 14:48:48
Problema Sum Scor 100
Compilator c-64 Status done
Runda Arhiva de probleme Marime 1.3 kb
#include <stdio.h>
#define MAXX 200000

char nrdp[MAXX + 1];
long long sump[MAXX + 1];
static inline long long form ( int a , int b ) {
    int rab;

    rab = b / a;
    return a * ( ( long long ) rab + 1 ) * rab / 2;
}
int main () {
    FILE *fin , *fout;
    int n , i , j , x;

    for ( i = 2 ; i <= MAXX ; i++ )
        if ( nrdp[i] == 0 )
            for ( j = i ; j <= MAXX ; j = j + i )
                nrdp[j]++;
    for ( i = 2 ; i * i <= MAXX ; i++ )
        if ( nrdp[i] == 1 )
            for ( j = i * i ; j <= MAXX ; j = j + i * i )
                nrdp[j] = -1;
    for ( i = 1 ; i <= MAXX ; i++ )
        sump[i] = ( ( long long ) 2 * i + 1 ) * ( 2 * i ) / 2;
    for ( i = 2 ; i <= MAXX ; i++ )
        if ( nrdp[i] != -1 )
            for ( j = i ; j <= MAXX ; j = j + i ) {
                if ( nrdp[i] % 2 == 0 ) // e cu +
                    sump[j] = sump[j] + form ( i , 2 * j );
                else
                    sump[j] = sump[j] - form ( i , 2 * j );
            }


    fin = fopen ( "sum.in" , "r" );
    fscanf ( fin , "%d" , &n );
    fout = fopen ( "sum.out" , "w" );

    for ( i = 0 ; i < n ; i++ ) {
        fscanf ( fin , "%d" , &x );
        fprintf ( fout , "%lld\n" , sump[x] );
    }
    fclose ( fin );
    fclose ( fout );
    return 0;
}