理论基础:一个合数一定有一个素因子 <= sqrt(n) 。
证明:
一个合数n肯定有素因子,并且在[2,n-1]上。若有一个素因子x大于等于sqrt(n),就必然有一个因子n/x小于等于sqrt(n),而n/x必有一个素因子小于等于sqrt(n) ,而n/x的素因子也是n的素因子。
已知:n <= 1e4。
代码如下:
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
int a[26] = {2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101};
int main(){
int n;
cin >> n;//n <= 1e4
int m = sqrt(n);
int flag = 0;
for(int i = 0;i<26&&i <= m;i++){
if(n%i == 0){
flag = 1;
break;
}
}
if(!flag) cout << "Yes" << endl;
else cout << "No" << endl;
return 0;
}