Cod sursa(job #676323)

Utilizator alexdmotocMotoc Alexandru alexdmotoc Data 8 februarie 2012 23:25:10
Problema Sum Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <cstdio>
#include <iostream>
#include <cstring>

using namespace std;

#define maxN 200005

int N , X;
bool ci[maxN];


int cmmdc (int a , int b)
{
	int r;
	
	while (b)
	{
		r = a % b;
		
		a = b;
		
		b = r;
	}
	
	return a;
}

void ciur ()
{
	
	for (int t = 2 ; t <= maxN ; ++t)
		if (!ci[t])
			for (int i = t + t ; i <= maxN ; i += t)
				ci[i] = true;
}


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


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