Cod sursa(job #1463801)

Utilizator eusebiu_gageaGagea Eusebiu-Andrei eusebiu_gagea Data 21 iulie 2015 15:59:15
Problema Fractii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.85 kb
#include <fstream>
#include <math.h>
using namespace std;
ifstream fin("fractii.in");
ofstream fout("fractii.out");
int n,v[1000000];
int cmmmc(int x,int y)
{
    int a,b,r,c;
    a=x;
    b=y;
    r=a%b;
    while(r!=0)
    {
        a=b;
        b=r;
        r=a%b;
    }
    c=x*y/b;
    return c;
}
int minimdiv(int x)
{
    int i;
    for(i=2;i<=sqrt(x);i++)
        if(x%i==0)
            return i;
    return x;
}
int scad(int x)
{
    int r;
    r=n%x;
    return (n-r)/x;
}
int sumaplus(int x)
{
    int adaug=n,aux,i,j;
    for(i=2;i<=sqrt(x);i++)
    {
        if(x%i==0)
        {
            if((x/i)%i==0)
            {
                if(v[minimdiv(i)]==0)
                {
                    adaug-=scad(minimdiv(i));
                    v[minimdiv(i)]=1;
                }
            }
            else
            {
                if(v[minimdiv(i)]==0)
                {
                    adaug-=scad(minimdiv(i));
                    v[minimdiv(i)]=1;
                }
                if(v[minimdiv(x/i)]==0)
                {
                    adaug-=scad(minimdiv(x/i));
                    v[minimdiv(x/i)]=1;
                }
            }
        }
    }
    if(v[minimdiv(x)]==0)
    {
        adaug-=scad(minimdiv(x));
        v[minimdiv(x)]=1;
    }
    for(i=1;i<n;i++)
        if(v[i]==1)
            for(j=i+1;j<=n;j++)
                if(v[j]==1)
                {
                    aux=cmmmc(i,j);
                    if(v[aux]==0)
                    {
                        adaug+=scad(aux);
                        v[aux]=1;
                    }
                }
    for(i=1;i<=n;i++)
        v[i]=0;
    return adaug;
}
int main()
{
    int s,i;
    fin>>n;
    s=n;
    for(i=2;i<=n;i++)
        s+=sumaplus(i);
    fout<<s<<"\n";
    return 0;
}