Cod sursa(job #185125)

Utilizator razyelxrazyelx razyelx Data 24 aprilie 2008 19:53:54
Problema Sum Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.44 kb
#include <stdio.h>
//#include <mem.h>
#include <string.h>
long a[2000000],b[2000000];
long prime[1000] = {1,2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,
73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,
181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,
293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,
421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,
557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,
673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,
821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,
953,967,971,977,983,991,997};
int main(){
	long n,x,k,i,j,l,d,aux;
	long long s;

	FILE*in  = fopen("sum.in","r");
	FILE*out = fopen("sum.out","w");

	fscanf (in,"%ld", &n);

	for (i=1;i<=n;i++){
	    fscanf (in, "%ld", &x);

	    aux = x;

	    for (j=1;j<=2*x;j++)
		  b[j] = a[j] = 0;
	    d = 1;k = 0;s = 0;
	    /*while (aux > 1){
		  if (aux % d == 0){
			a[++k] = d;
			while (aux % d == 0) aux /= d;
		  }
		  d++;
	    }*/
	    while (prime[d] <= aux/2){
		  if (aux % prime[d] == 0) a[++k] = prime[d];
	    }

	    for (j=1;j<=k;j++)
		for (l=1;a[j]*l<=2*x;l++)
		    b[a[j]*l] = 1;

	    for (l=1;l<=2*x;l++)
		if (!b[l]) s += l;

	    fprintf (out, "%lld\n", s);
	}
	return 0;
}