Pagini recente » Cod sursa (job #2838123) | Cod sursa (job #2569275) | Cod sursa (job #1706143) | Cod sursa (job #2291526) | Cod sursa (job #2551623)
#include <fstream>
#include <vector>
#include <cstring>
using namespace std;
ifstream f ("sum.in");
ofstream g ("sum.out");
int fr[200005], prime[30005];
bool ciur[200005], used[200005], aux[200005];
int t, k;
long long x;
void Eratosthene ()
{
int i, j;
aux[1] = 1;
for (i=2; i<=200000; i++)
{
if (aux[i] == 0)
{
k ++;
prime[k] = i;
for (j=2*i; j<=200000; j+=i)
aux[j] = 1;
}
}
}
void getfact (int x)
{
int i, p;
for (i=1; prime[i]*prime[i] <= x && i <= k; i++)
{
p = 0;
while (x % prime[i] == 0)
{
p ++;
x /= prime[i];
}
if (p > 0)
fr[prime[i]] ++;
}
if (x > 1)
fr[x] ++;
}
void solve (long long nr)
{
int i, j;
long long suma;
suma = nr * (nr+1) / 2;
memset(used, 0, sizeof(used));
memset(ciur, 0, sizeof(ciur));
ciur[1] = 1;
for (i=2; i<=nr; i++)
{
if (ciur[i] == 0)
{
for (j=i; j<=nr; j+=i)
{
ciur[i] = 1;
if (fr[i] && !used[j])
{
suma -= j;
used[j] = 1;
}
}
}
}
g << suma << '\n';
}
int main()
{
int i;
Eratosthene();
f >> t;
for (i=1; i<=t; i++)
{
f >> x;
memset(fr, 0, sizeof(fr));
getfact(x);
solve(2*x);
}
return 0;
}