Cod sursa(job #676326)

Utilizator alexdmotocMotoc Alexandru alexdmotoc Data 8 februarie 2012 23:36:12
Problema Sum Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <cstdio>
#include <iostream>
#include <cstring>

using namespace std;

#define maxN 200005

int N , X , fact[325] , dim;
bool ci[maxN];


void descompune (int X)
{
	int d = 2;
	
	dim = 0;
	
	while (X != 1)
	{
		
		if (X % d == 0)
			fact[++dim] = d;
		
		while (X % d == 0)
			X /= d;
		
		++d;
	}
	
}


void ciur (int X)
{
	
	for (int t = 1 ; t <= dim ; ++t)
		for (int i = fact[t] ; i <= 2 * X ; i += fact[t])
			ci[i] = true;
}


long long solve (int X)
{
	long long sol = 0;
	
	for (int i = 1 ; i <= 2 * X ; ++i)
		if (!ci[i])
			sol += i;
		
	memset (ci , 0 , sizeof (ci));
	
	return sol;
}


int main ()
{
	freopen ("sum.in" , "r" , stdin);
	freopen ("sum.out" , "w" , stdout);
	
	scanf ("%d" , &N);
	
	long long sol;
	int prec = -1;
	
	for (int i = 1 ; i <= N ; ++i)
	{
		scanf ("%d" , &X);
		
		descompune (X);
		
		if (X != prec)
		{
			ciur (X);
			prec = X;
		}
		
		sol = solve (X);
		
		printf ("%lld\n" , sol);
	}
	
	return 0;
}