Pagini recente » Cod sursa (job #2909145) | Cod sursa (job #78197) | Cod sursa (job #1752943) | Cod sursa (job #2838812) | Cod sursa (job #1061260)
#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;
}