先看题目:https://ac.nowcoder.com/acm/problem/14399
解题思路:
因为数据量并不大( ),
所以用试除法(O(√n))不会超时
代码:
#include<bits/stdc++.h> using namespace std; int factor[110]; int main() { int T; scanf("%d",&T); while(T--) { memset(factor, 0 ,sizeof(factor)); int x, tot=0; bool flag = 1; scanf("%d",&x); for(int i = 2; i*i <= x; i++) { //可以通过i*i <= x 来避免使用sqrt() if(x % i == 0) { flag = 0; factor[++tot] = i; while(x % i == 0) { x /= i; //试除法可以保证都是质数,因为如果有一个合数,那么组成它的质数肯定已经在它之前把x给榨干了。 } } } if(x != 1) factor[++tot] = x; if(flag) { printf("isprime\n"); } else { printf("noprime\n"); } for(int i = 1; i < tot; i++) { printf("%d ",factor[i]); } printf("%d\n",factor[tot]); } }