Cod sursa(job #917272)

Utilizator romykPrehari Romica romyk Data 17 martie 2013 15:56:09
Problema Fractii Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 1.7 kb
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define S 6
#define U 1
#define MAXSIZE 5000001
bool a[MAXSIZE];
long b[MAXSIZE],c[MAXSIZE];
int main()
{long long i,j,j2,i22,i11,l;
long m=2,n,p,ok,m2;

    freopen("fractii.in","r",stdin);
    freopen("fractii.out","w",stdout);
    scanf("%li",&m2);
    //m2=10000;
    n=m2*15;
    b[1]=2;
    b[2]=3;
    p=n/7;
    a[4]=1;
    a[6]=1;
    for(i=4;i<=n;i+=2)
    a[i]=1;
    for(i=6;i<=n;i+=3)
    a[i]=1;
    for(i= S ; i <=p ; i += S)
    {
        if(! a [ i-1 ])
        {
            i11 = (i-1)*S;
            for( j =i11+i-1, j2 = (i-1) * (i-1) ; j<= n; j += i11, j2 += i11 )
                {
                    a[j]=1;
                    if( j2 <= n )
                        {
                        a[j2]=1;
                        }}
        }
        if(! a [ i+1])
        {
            i22 = (i+1)*S;
            for(j =(i+1)*(i+1) ; j <= n ; j += i22)
                {
                a[j]=1;
                }}
        }
    for(i=S;i<n;i+=S)
       {
           if(!a[i-1])
           b[++m]=i-1;
           if(!a[i+1])
           b[++m]=i+1;
          // m+=!a[i+1]+!a[i-1];
       }
    n=2*m2-1;

       for(j=2;j<=m2;j++)
       c[j]=m2-1;
    for(i=2;i<=m2;i++)
    {
        if(a[i]==false)
        {for(j=i;j<=m2;j+=i)
        {c[j]--;
         if(i!=j)
         c[i]--;
    }}
    else
    {ok=1;
        for(l=1;l<=i;l++)
    if(i%b[l]==0)
    {
    if(ok)
       {c[i]--;ok=0;}
        for(j=i+b[l];j<=m2;j+=b[l])
        {c[j]--;
         if(b[l]!=j)
         c[i]--;
    }}

    }}
    for(i=2;i<=m;i++)
    n+=c[i];
   printf("%li",n);
    return 0;
}