题目链接:登录—专业IT笔试面试备考平台_牛客网https://ac.nowcoder.com/acm/contest/26656/1001
题目:
代码详解:
#include<iostream>
#include<vector>
#include<cmath>
using namespace std;
typedef long long ll;
int main()
{
ll t, n;
cin >> t;
while (t--)
{
int flag = 1;//起到检测n是否为素数的作用
vector<int>arr;
cin >> n;
int h = sqrt(n);//取从2到n平方就可以求出所有数
for (int i = 2; i <= h; i++)
{
if (n % i == 0)//
{
flag = 0;
arr.push_back(i);//素数因子放入arr中
while (n % i == 0)
n /= i;//这一步很重要
//把非素数的所有能去除的素数因子去掉
if (n == 1) break;//找到了全部的素数因子
}
}
//该循环起到了找到一个素数因子就存储该因子去除掉相同的因子的效果
if (flag)//如果为素数,它的素数因子只有它本身
{
cout << "isprime" << endl << n << endl;
}
else
{
cout << "noprime" << endl;
for (int i = 0; i < arr.size(); i++)
{
cout << arr[i] << " ";
}
if (n == 1)
cout << endl;
else
cout << n << endl;//输出最后一个素数因子
}
}
return 0;
}
PS:学如逆水行舟,不进则退,坚持是你的胜利的护航。加油!