Đề bài là tìm số nguyên tố thứ n. n<10000, thời gian 1s.
Input N
Ouput M
VD
Input
3
Output
5
---
Em mới làm xong, không biết có cách nào tối ưu hơn được nữa không ạ?
Code bên dưới với n<3600, t<1s, nhưng n>3600, t>1s
Anh chị xem giùm, chỉ dẫn em với ạ.
Input N
Ouput M
VD
Input
3
Output
5
---
Em mới làm xong, không biết có cách nào tối ưu hơn được nữa không ạ?
Code bên dưới với n<3600, t<1s, nhưng n>3600, t>1s
Anh chị xem giùm, chỉ dẫn em với ạ.
PHP Code:
#include <stdio.h>
#include <stdlib.h>
char* inputDirect= "input.txt";
char* outputDirect= "output.txt";
int numIn;
int length;
int* numArr;
int IsPrime(int num);
void ReadInput();
void WriteOutput();
int main()
{
ReadInput();
length= numIn*numIn;
numArr= (int*)calloc(length,sizeof(int));
long int i, j;
for(i=0;i<length;i++)
{
numArr[i]= 1;
}
for(i=2;i*i<=length;i++)
{
if(numArr[i]==1)
{
for(j=i;i*j<=length;j++)
{
numArr[i*j]=0;
}
}
}
WriteOutput();
return 0;
}
void ReadInput()
{
FILE* f= fopen(inputDirect,"r");
if(f)
{
fscanf(f,"%d",&numIn);
fclose(f);
}
}
void WriteOutput()
{
int i, count= 0;
FILE* f= fopen(outputDirect,"w");
if(f)
{
for(i=2;i<length;i++)
{
if(numArr[i]==1)
{
count++;
}
if(count==numIn)
{
fprintf(f,"%d",i);
fclose(f);
return;
}
}
fprintf(f,"-1");
fclose(f);
}
}
int IsPrime(int num)
{
if(num<2)
{
return 0;
}
if(num==2)
{
return 1;
}
if(num%2==0)
{
return 0;
}
int i;
for(i=3;i*i<=num;i+=2)
{
if(num%i==0)
{
return 0;
}
}
return 1;
}
Comment