Cod sursa(job #2127427)

Utilizator Consti.001FMI Dranca Constantin Consti.001 Data 10 februarie 2018 17:30:45
Problema Fractii Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include<iostream>
#include<fstream>
#include<queue>
using namespace std;
ifstream f("fractii.in");
ofstream g("fractii.out");

int * ciur(int n)
{
    int nr=0;
    queue <int> q;
    int vect[n];
    for(int i=0;i<=n;++i)
    vect[i]=0;

    vect[0]=vect[1]=1;
    for(int i=2;i<=n;++i)
    if(vect[i]==0)
    {
        q.push(i);
        ++nr;
        for(int j=i+i;j<=n;j=j+i)
        vect[j]=1;
    }
    int* vec=new int[nr+1];
    vec[0]=nr;
    for(int i=1;i<=nr;++i)
    {
        vec[i]=q.front();
        q.pop();
    }
    return vec;
}

int indicator(int x,int *ciur)
{
    long long int nr=x;
    long long int nr_1=1;
    for(int i=1;i<=ciur[0]&&ciur[i]<=x;++i)
    if(x%ciur[i]==0)
    {
        nr=nr/ciur[i];
        nr_1=nr_1*(ciur[i]-1);
    }
    nr=nr*nr_1;
    return nr;
}

int main()
{
    int n;
    f>>n;
    int *v_ciur=ciur(n);
    int m=v_ciur[0];

    long long int nr=0;
    for(int i=2;i<=n;++i)
    nr+=2*(indicator(i,v_ciur));

    nr++;
    g<<nr;
    return 0;
}