Cod sursa(job #1061260)

Utilizator andreeadeacAndreea Ioana Deac andreeadeac Data 19 decembrie 2013 15:26:31
Problema Sum Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.34 kb
#include <fstream>
using namespace std;
ifstream f("sum.in");
ofstream g("sum.out");

const int N=100000;
int e[N+1];

int main()
{
    /*cout << "Hello world!" << endl;
    1)daca y este prim cu x si y<x, atunci y+x este prim cu x
    2)daca y este prim cu x si y>x, atunci y-x este prim cu x
    3)daca y este prim cu x si y<x, atunci x-y este prim cu x

    (3) => fiecare y prim cu x, y<x are un complementar y-x prim cu x => suma numerelor y<x, prime cu x este x*e[x]/2
    fie y prim cu x, mai mic ca x si z=y-x perechea lui y. Atunci y + x si z + x sunt si ele prime cu x (*)
    invers: pentru fiecare t prim cu x, x < t < 2*x, t-x este prim cu x si 0 < t-x < x (**)

    din (*) si (**) => toate numerele prime cu x , t, din intervalul (x, 2*x) sunt de forma y+x, unde y este prim cu x, din (0,x)

    => suma numerelor prime cu x din (x, 2*x) este 3*x*e[x]/2

    suma ceruta este 2*x*e[x]


    (a,b) = cmmdc al numerelor a si b este un numar d cu proprietatile:
    1) d|a si d|b
    2) oricare ar fi d2 cu d2|a si d2|b, avem d2|d
    */

    int n,i,j,x;
    f>>n;
    for(i=2;i<=N;i++)
        e[i]=i-1;
    for(i=2;i<=N;i++)
        if(e[i]==i-1)
            for(j=i+i;j<=N;j+=i)
                e[j]=e[j] - e[i];
    for(i=1;i<=n;i++){
        f>>x;
        g<<2*(long long)x*e[x]<<"\n";
    }
    return 0;
}