Cod sursa(job #126568)

Utilizator catalaurCatalin catalaur Data 22 ianuarie 2008 14:29:21
Problema Fractii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
// 
// File:   newmain.cc
// Author: catalaur
//
// Created on January 19, 2008, 1:20 AM
//

#include <stdio.h>
#include <iostream.h>

int prime(long n){
    long i, j, nr = 1 , pas , frac=1;  
    long prim1[1000000];
    int p[1000000];
    long prim2[1000000];
    for (i = 2; i <= n; ++i) {  
     if (p[i] == 0) {  
       pas=1;
       for (j = i + i; j <= n; j += i) {  
          pas++;
          p[j] = 1;
          prim1[j]=i;
          prim2[j]=pas;
       }  
     }
    }
    for (i=2;i<=n; i++){
        if (p[i]==0){
            frac+=(i-1)*2;
        }else{
            if (p[prim1[i]]==0 and p[prim2[i]] == 0){
                frac+=(i-2*i/prim2[i]+i/prim1[i]*prim2[i]);
            }else{
                while (p[prim2[i]] != 0 and (prim2[i]/prim1[i]) == 0){
                    prim2[i] = prim2[i]/prim1[i];
                }
                frac+=(i-i/prim2[i])*2;
            }
        }
    }
    cout<<frac;
}
int main() {
    FILE *fi,*fo;
    long n,i,j;
    fi = fopen("fractii.in" , "r");
    fscanf(fi , "%d" , &n);
    fclose(fi);
    prime(n);
    fo = fopen("fractii.out" , "w");
    //fprintf(fo , "%1d" , frac);
    return 0;
}