建質數表建到46341(2147483647的根號
然後去除這個質數表的質數判斷
這樣結果還TLE
那該怎麼辦呢
ps.程式碼附上
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define N 46441
main()
{
int a[N];
int p[10000];/*改變n的時候這裡也要跟著改*/
int con;
int p_con=2;
long int con_2;
int n;
int jud;
int i;
for(con=3,i=0;con<=N;con++)
{
a[con]=i;
i=(i+1)%2;
}
a[1]=1;
a[2]=0;
p[1]=2;
for(con=3;con<=sqrt(N);con++)
{
if(a[con]==0)
{
p[p_con]=con;
p_con++;
for(con_2=con*con;con_2<=N;con_2=con_2+con*2)
{
a[con_2]=1;
}
}
}
for(;con<=N;con++)
{
if(a[con]==0)
{
p[p_con]=con;
p_con++;
}
}
while(scanf("%d",&n)!=EOF)
{
jud=0;
for(con=1;p[con]<=sqrt(n)&&jud==0;con++)
{
if(n%p[con]==0)
jud++;
}
if(jud==0&&n!=1)
printf("質數\n");
else
printf("非質數\n");
}
return 0;
}
ps.把這個程式碼的質數改成0,非質數改成1,再加個終止條件,可以1.1s過d705