Cod sursa(job #1483434)

Utilizator amneCornel Cruceru amne Data 9 septembrie 2015 11:52:05
Problema Fractii Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <stdio.h>

#define MAX_N 1000000


int p[MAX_N];

int primes(int n){
int i,j;
p[0] = 0;
p[1] = 0;
for(i=2;i*2<=n;i++){
    if(p[i] == 0){
	for(j=i*2;j<=n;j+=i){
	    if(p[j] == 0){
		p[j] = i;
	    }
	}
    }
}
}

int cmmdc(int a,int b){
    return b ? cmmdc(b, a % b) : a;
}


long long calc(n){
    int i = 0,j = 0;
    long long result = 1;
    for(i = 1; i<n-1; i++){
	for(j = i+1;j<n; j++){
//	    printf("%d/%d = ", i, j);
	    if(i == 1){
//		printf("OK\n");
		result+=2;
		continue;
	    } else if(j % i){
	        int p_i = p[i];
	        int p_j = p[j];
	        if(!(p_i && p_i == p_j)){
	        int cont = 0;
	        if(p_i && !(j % p_i)) cont = 1;
	        if(p_j && !(i % p_j)) cont = 1; 
	        if(!p_i && !p_j) cont = 0;
	        if(!cont){
		    //if(cmmdc(j,i) <= 1){
//			printf("OK\n");
			result+=2;
			continue;
		    //}
		}
		}
	    }
//	    printf("NOT OK\n");
	}
    }
    return result;
}

int main(){
    FILE *f = fopen("fractii.in","r");
    int n;
    long long res = 0;
    fscanf(f,"%d",&n);
    fclose(f);
    
    primes(n);
    
  
/*    int k;
    for(k=0;k<11;k++){
	printf("%d=%d; ",k,p[k]);
    }
*/
//    printf("\n");
    
    res = calc(n+1);
    // printf("%lli \n",res);
    
    f = fopen("fractii.out","w");
    fprintf(f,"%lli",res);
    fclose(f);
    
}