题目大意:判断一个数是否是两个素数的乘积,如果是,输出Yes,否则No。
分析:先打表求出来一部分素因子,用素数对素数判定还是比较快的。
代码如下:
===============================================================================================================================
#include#include #include #include #include #include using namespace std;const int MAXN = 10005;int p[MAXN]={ 2};bool Prime(int n){ if(n == 1 || n==0) return false; for(int i=0; p[i]*p[i] <= n; i++) { if(n % p[i] == 0) return false; } return true;}int main(){ for(int i=3, j=1; i<32000; i++) { if(Prime(i)) p[j++] = i; } int T; scanf("%d", &T); while(T--) { int i, N; scanf("%d", &N); for(i=0; p[i]*p[i] <= N; i++) { if(N%p[i]==0 && Prime(N/p[i])) break; } if(p[i]*p[i] <= N) printf("Yes\n"); else printf("No\n"); } return 0;}