Cod sursa(job #1874876)

Utilizator mircearoataMircea Roata Palade mircearoata Data 10 februarie 2017 15:25:52
Problema Fractii Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.58 kb
#include <iostream>
#include <fstream>
#include <bitset>

using namespace std;

ifstream in("fractii.in");
ofstream out("fractii.out");

int n,z,raspuns;
bitset<1000001> ciur;
int prime[78500];

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

bool ireductibila(int a, int b)
{
    if(b==1)
    {
        return 1;
    }
    else if(ciur[a]==1 && ciur[b]==1)
    {
        if(cmmdc(a,b)==1)
        {
            return 1;
        }
    }
    else if(ciur[a]==0&&ciur[b]==1)
    {
        if(b>a)
        {
            if(b%a!=0)
            {
                return 1;
            }
        }
        else
        {
            return 1;
        }
    }
    else if(ciur[b]==0&&ciur[a]==1)
    {
        if(a>b)
        {
            if(a%b!=0)
            {
                return 1;
            }
        }
        else
        {
            return 1;
        }
    }
    else if(a!=b)
    {
        return 1;
    }
    return 0;
}

int main()
{
    in>>n;
    for(int i = 2; i<=1000000; i++)
    {
        if(ciur[i]==0)
        {
            z++;
            prime[z]=i;
            for(int j = 2; j<=1000000/i; j++)
            {
                ciur[i*j]=1;
            }
        }
    }
    raspuns=n;
    for(int i = 2; i<=n; i++)
    {
        for(int j = 1; j<=n; j++)
        {
            if(ireductibila(i,j))
            {
                raspuns++;
            }
        }
    }
    out<<raspuns;
    return 0;
}