/* 搜索一亿以内的素数以及“超级素数”*/
/* 下面的代码请在 TC 下编译连接
tcc thisfile.c <回车>
由于嵌入了汇编,运行速度大提高!
*/
void dummy( ){ _turboFloat(); } /*本行可躲开 TC 的一个瑕疵*/
#include<stdio.h>
#include<time.h>
#define SAVE_DISP {super[ns++]=x;printf("//第%ld个超级素数: %ld\n",ns,x);return(1);}
long ns=2,super[99]={2,3};/*超级素数*/
int Super(long x)/*假设x已经是素数*/
{
long i;
if(x<10)
SAVE_DISP
else if(x<20)
return 0;
else
{
for(i=ns-1;i>=0;i--)
if(super[i]<=x/10)
{
if(super[i]==x/10)
SAVE_DISP
else
return 0;
}
}
}
int main( void )
{
long k,k2=1,kp=2,pmax,nd=10;
long x,p[1230]={2,3},p2=3*3;
for(x=5; x<100000000; x=x+2)
{
if(x==p2)
{
k2++;
p2=p[k2]*p[k2];
continue;
}
for(k=1; k<k2; k++)
{
/*if(x%p[k]==0)break;*/
asm .386
asm mov ax,k
asm shl ax,2
asm lea bx,p[0]
asm add bx,ax
asm mov eax,x
asm mov edx,0
asm div dword ptr [bx]
asm and edx,edx
asm jz BREAK
}
BREAK:
if(k>=k2)
{
if(kp<1230)p[kp]=x;
kp++;
if(kp%1000000==0||kp==nd)printf("//第%ld个素数=%ld\n",kp,x),nd*=10;
pmax=x;
Super(x);
}
}
printf("//第%ld个素数=%ld\n",kp,pmax);
printf("//运行耗时%.2f秒\n",clock()/18.2);
return 0;
}
/* 下面的代码请在 TC 下编译连接
tcc thisfile.c <回车>
由于嵌入了汇编,运行速度大提高!
*/
void dummy( ){ _turboFloat(); } /*本行可躲开 TC 的一个瑕疵*/
#include<stdio.h>
#include<time.h>
#define SAVE_DISP {super[ns++]=x;printf("//第%ld个超级素数: %ld\n",ns,x);return(1);}
long ns=2,super[99]={2,3};/*超级素数*/
int Super(long x)/*假设x已经是素数*/
{
long i;
if(x<10)
SAVE_DISP
else if(x<20)
return 0;
else
{
for(i=ns-1;i>=0;i--)
if(super[i]<=x/10)
{
if(super[i]==x/10)
SAVE_DISP
else
return 0;
}
}
}
int main( void )
{
long k,k2=1,kp=2,pmax,nd=10;
long x,p[1230]={2,3},p2=3*3;
for(x=5; x<100000000; x=x+2)
{
if(x==p2)
{
k2++;
p2=p[k2]*p[k2];
continue;
}
for(k=1; k<k2; k++)
{
/*if(x%p[k]==0)break;*/
asm .386
asm mov ax,k
asm shl ax,2
asm lea bx,p[0]
asm add bx,ax
asm mov eax,x
asm mov edx,0
asm div dword ptr [bx]
asm and edx,edx
asm jz BREAK
}
BREAK:
if(k>=k2)
{
if(kp<1230)p[kp]=x;
kp++;
if(kp%1000000==0||kp==nd)printf("//第%ld个素数=%ld\n",kp,x),nd*=10;
pmax=x;
Super(x);
}
}
printf("//第%ld个素数=%ld\n",kp,pmax);
printf("//运行耗时%.2f秒\n",clock()/18.2);
return 0;
}