可以發現,對於每一個合數$N$
設它的最小質因數為$P$
一定有$\frac{N}{P}\geq P$
而且$P\leq \frac{N}{P}最小的質因數$
因此,我們可以從小到大枚舉$Q$ ($\frac{N}{P}$)
所有$\leq Q最小的質因數$的質數$P$去更新$PQ$
實作上枚舉$P$的時候發現$P$整除$Q$時跳出迴圈即可
code:
#include<cstdio> #include<vector> using namespace std; bool IS_PRIME[65537]; vector<int>PRIMES; int main() { for(int i=2;i<=65536;i++)IS_PRIME[i]=true; for(int n=2;n<=65536;n++) { if(IS_PRIME[n])PRIMES.push_back(n); for(int i=0;i<(int)PRIMES.size()&&PRIMES[i]<=65536/n;i++) { IS_PRIME[n*PRIMES[i]]=false; if(n%PRIMES[i]==0)break; } } for(int i=0;i<(int)PRIMES.size();i++)printf("The %d-st prime is %d.\n",i,PRIMES[i]); return 0; }
沒有留言:
張貼留言
歡迎留言或問問題~
若您的留言中包含程式碼,請參考這篇
如果留言不見了請別慌,那是因為被google誤判成垃圾留言,小莫會盡快將其手動還原
注意:只有此網誌的成員可以留言。