题目大意:判断一个数是否是两个素数的乘积,如果是,输出Yes,否则No。
分析:先打表求出来一部分素因子,用素数对素数判定还是比较快的。
代码如下:
===============================================================================================================================
#include<stdio.h> #include<algorithm> #include<vector> #include<iostream> #include<math.h> #include<string.h> 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; }
时间: 2025-01-07 11:19:03