第一次写博客,纪念我转行2星期。
昨天晚上刷codewar的题目,心血来潮想能不能用欧几里得筛法重新做快速素数判断方法呢?这个方法虽然说空间复杂度要远远高于试除法。
void GeneratePrime(int n) { int i,primelist_index,size_of_primelist=1,last_query_index; primelist[0]=2; for (i=3;i<n;i+=2) { int roof=(int)sqrt(i)+1; for (last_query_index=0;last_query_index<=size_of_primelist;++last_query_index) { if (primelist[last_query_index]>=roof) break; } Loop: for(primelist_index=0;primelist_index<last_query_index;++primelist_index) { if(i%primelist[primelist_index]==0) { i+=2; goto Loop; } } primelist[size_of_primelist]=i; ++size_of_primelist; } }
goto是为了使得在检索素数表后,却不在素数表中添加新的东西使用的。但是毕竟大家不常使用goto语句,所以如果有哪位看到这个的话,也可以教教我怎么不用goto语句实现这个的。