Cod sursa(job #1327865)

Utilizator cntvC.N.T.V. cntv Data 27 ianuarie 2015 12:07:53
Problema Fractii Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.73 kb
#include <iostream>
#include <fstream>
using namespace std;
int n,j,i,d,l,fr[1000000],a[50],s,s1,s2,nr22,N;
long long nr,nr1;
ofstream g("fractii.out");
int main()
{
    freopen("fractii.in","r",stdin);
    scanf("%d",&n);

    nr=n;
    if(n>10000)
        N=10000;
    else
        N=n;
    for(j=2;j<=N;j++)
    {
    for(l=j;l<=n;l=l+j)
        fr[l]=1;
    nr1=0;
    for(i=2;i<=j/2;i++)
            if(fr[i]==0&&j%i==0)
                {
                    for(l=i;l<=n;l=l+i)
                    fr[l]++;
                }
    nr1=0;
    for(i=1;i<=n;i++)
        {if(fr[i]>=1)
        nr1++;
        fr[i]=0;}
    nr1=n-nr1;
    nr=nr+nr1;
    }
    if(n>10000)
    {nr22=0;
        for(j=10001;j<=n;j++)
        {
            for(l=j;l<=n;l=l+j)
        fr[l]=1;
    nr1=0;
    for(i=2;i<=j/2;i++)
            if(fr[i]==0&&j%i==0)
                {
                    for(l=i;l<=n;l=l+i)
                    fr[l]++;
                }
    nr1=0;
    for(i=1;i<=n;i++)
        {if(fr[i]>=1)
        nr1++;
        fr[i]=0;}
    nr1=n-nr1;
    l=0;
    while(nr1!=0)
    {l++;
        a[l]=(a[l]+nr1%10)%10;
        a[l+1]=a[l+1]+(a[l]+nr1%10)/10;
        j=l+1;
        while(a[j]>9)
                {a[j]=0;
                a[j+1]++;}
        nr1=nr1/10;
    }
    s=l;
        }

        while(nr!=0)
        {
            s1++;
            a[s1]=a[s1]+(nr%10);
            j=s1;
            while(a[j]>9)
            {
                a[j]=a[j]%10;
                a[j+1]++;
                j++;
            }
            if(j>s)
                s=j;
            nr=nr/10;
        }


    for(i=s;i>=1;i--)
        g<<a[i];
    }
    else
    g<<nr;
    return 0;
}