素数筛选法 By yusijia May 01 2016 Updated:May 01 2016 Contents 1. 素数筛选法 素数筛选法 预处理的时候把表打出来,复杂度:O(nlogn),然后O(1)查询 思路就是从2开始往后把他的整数倍的数做个标记为不是素数 12345678910111213141516171819202122232425262728293031#include <cstdio>int mark[1000] = {0}; //0代表质数int main(){ int n; //预处理 for(int i = 2; i <= 1000; i++)if(mark[i] == 0){//前面没有因子使mark[i]变成1,说明除了1和本身不能被别的数整除了 for(int j = i + i; j <= 1000; j += i){//整数倍的移动 mark[j] = 1; //他的整数倍的数都不是素数,因为因子中除了1和本身还多了他 } } int a; while(scanf("%d",&n)!=EOF) //要输入的数的个数 { for(int i=0;i<n;i++) { scanf("%d",&a); //不能输入1,不是素数,输入1是没有意义的 printf(mark[a]==0?"Y ":"N "); //问号冒号表达式 //输入一次判断一次 /*if(mark[a]==0) //注意是mark[a] ,查表 printf("Y "); else printf("N ");*/ printf("\n"); } } return 0;}//注意:1不是素数,从2开始预处理,