Q:求解小于或等于整数N的最大素数
A:穷举法枚举从N到√N,逐个用2到√N的数去整除,若能除尽则不是素数。
tips:如果一个整数N不是素数,它一定可以分解为比它小的两个整数的乘积,其中一个乘数小于或等于根号n,另一个大于或等于根号n。
怎么证明最大素数一定在根号n到n之间出现?
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
//根号n到n的每一个数的因数范围都可以被n的判断范围所覆盖 #include<iostream> #include<cstdio> #include<cmath> using namespace std; int main(){ int n; cin>>n; int d=(int) sqrt(n);//d:边界 for(int i=n;i>=d;i-- ){//从大到小逐一检查 int j; for( j=2; j<=d; j++){ if(i%j == 0) break; } if(j > d) {printf("%d\n",i); break;} } return 0; }
后记:算法解题的策略和数学思想方法很有联系。
比如迭代法求二次方程的根;渐次逼近思想。
简单性原理来分解问题,以简驭繁