Pagini recente » Cod sursa (job #1999571) | Cod sursa (job #420174) | Cod sursa (job #1240045) | Cod sursa (job #1296872) | Cod sursa (job #1061244)
#include <fstream>
using namespace std;
ifstream f("sum.in");
ofstream g("sum.out");
const int N=100000;
int e[N+1],c[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;
long long s=0;
f>>n;
for(i=2;i<=N;i++)
e[i]=i;
for(i=2;i<=N;i++)
if(e[i]==i)
for(j=i;j<=N;j+=i)
e[j]=e[j]/i*(i-1);
for(i=1;i<=n;i++)
f>>c[i];
for(i=1;i<=n;i++){
s=2*c[i]*e[c[i]];
g<<s<<"\n";
}
return 0;
}