Afişează mesaje
Pagini: [1]
1  infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 023 Numere Prime : Februarie 21, 2014, 13:12:43
Se poate uita cineva la sursa mea, scrisa mai jos? Imi da 50 de puncte fiindca la ultimele 5 teste imi iese din timp. Pana acum nu am reusit sa gasesc o solutie sa mearga mai repede.

Cod:
#include<stdio.h>
#include<stdlib.h>
unsigned long k,d,i,q=1,n=3,N; unsigned a[99988]; short flag=1;
int main()
{
    FILE*f=fopen("prim.in","rb"); fscanf(f,"%lu",&k); fclose(f);
    FILE*g=fopen("prim.out","wb");
    if(k>1)
    {
        while(q<k)
        {
            flag=0;
            for(d=3;d*d<=n&&!flag;d+=2)
                if(n%d==0) flag=1;
            if(flag==0)
            {
                q++;
                a[q]=n;
            }
            n+=2;
        }
        N=n;
        while(flag==0)
        {
            n+=2;
            for(d=N;d*d<=n&&!flag;d+=2) if(n%d==0) flag=1;
            if(flag==1) for(i=2;i<=k&&flag;i++) if(n%a[i]==0) flag=0;
        }
        fprintf(g,"%ld",n);
    }
    else fprintf(g,"%d",9);
    fclose(g);
    return 0;
}
Pagini: [1]
Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines