void shai(int n) { int i,j,cnt; cnt = 0; memset(su,0,sizeof(su)); memset(prime, true, sizeof(prime)); prime[1] = prime[0] = false; for(i = 2; i <= n; ++i) { //cout << prime[i] << endl << endl; if(prime[i]) su[cnt++] = i; for(j = 0; j < cnt && su[j]*i <= n; ++j){ prime[su[j]*i] = false; if(i%su[j] == 0) break; } } //for(i=0 ; i<cnt; ++i) // printf("%d ",su[i]); return ; }
其实优化就在 i%su[j] == 0这上面
首先 任何数都是由若干个质因子构成的,假如