Pagini recente » Cod sursa (job #947527) | Cod sursa (job #1408766) | Cod sursa (job #1053973) | Cod sursa (job #1922476) | Cod sursa (job #2563368)
#include <fstream>
using namespace std;
ifstream fin("sum.in");
ofstream fout("sum.out");
int n, x;
int ind[100002];
void rez()
{
int i, j;
for(i = 1; i <= 100000; i++)
ind[i] = i;
for(i = 1; i <= 100000; i++)
for(j = 2 * i; j <= 100000; j += i)
ind[j] -= ind[i];
}
int main()
{
int i;
fin >> n;
rez();
for(i = 1; i <= n; i++)
{
fin >> x;
fout << 1LL * 2 * x * ind[x] << "\n";
}
return 0;
}
/**
x-p x x+p
1 6 11
5 6 7
///n = (a1 ^ p1) * (a2 ^ p2) * .. (ak ^ pk)
///ind(n) -- nr de numere mai mici decat n, prime cu n
///ind(n) = n * (1 - 1/a1) * (1 - 1/a2) * .... * (1 - 1/ak)
/// n = 6 = 2 * 3
/// ind(6) = 6 * 1/2 * 2/3 = 2
1, 2, 3, 4, 5, ..... n - 1, n
n = 6
1, 2, 3, 4, 5, 6
G(i) --- multimea nr care au cu 6 cmmdc-ul i
G(1) --- multimea nr care au cu 6 cmmdc-ul 1
G(1) = {1, 5}
D(6) -- multimea nr care au cu 6 cmmdc 1
D(6) - {1, 5}
G(2) --- multimea nr care au cu 6 cmmdc-ul 2
G(2) = {2, 4}
D(3) -- multimea nr care cu 3 au cmmdc 1
D(3) = {1, 2}
G(3) --- multimea nr care au cu 6 cmmdc-ul 3
G(3) = {3}
D(2) -- multimea nr care au cu 2 cmmdc 1
D(2) = {1}
G(4) --- multimea nr care au cu 6 cmmdc-ul 4
G(4) = O
G(5) --- multimea nr care au cu 6 cmmdc-ul 5
G(5) = O
G(6) --- multimea nr care au cu 6 cmmdc-ul 6
G(6) = {6}
D(1) -- multimea nr care cu 1 au cmmdc 1
D(1) = {1}
n = G(1) + G(2) + G(3) + G(4) + G(5) + G(6)
=> ind(6) = 6 - ( ind(3) + ind(2) + ind(1) )
n = ind(a1) + ind(a2) + ind(a3) + ind(a4) + .... + ind(ak)
ind: 1 2 3 4 5 6 7 8 9
1 1 2 2 4 2 6 4 6
*/