描述
功能:输入一个正整数,按照从小到大的顺序输出它的所有质因子(重复的也要列举)(如180的质因子为2 2 3 3 5 )
数据范围: 1≤n≤2×10^9+14
输入描述:
输入一个整数
输出描述:
按照从小到大的顺序输出它的所有质数的因子,以空格隔开。
示例
输入:180
输出:2 2 3 3 5
思路
代碼
ListPrimes.h
#pragma once
#include <mutex>
class ListPrimes
{
public:
static ListPrimes* getInstance();
public:
void listPrimes();
private:
ListPrimes() = default;
~ListPrimes() = default;
private:
static ListPrimes* instance;
static std::mutex iMutex;
};
ListPrimes.cpp
#include <iostream>
#include <cmath>
#include <vector>
#include "ListPrimes.h"
ListPrimes* ListPrimes::instance = nullptr;
std::mutex ListPrimes::iMutex;
ListPrimes* ListPrimes::getInstance()
{
std::unique_lock<std::mutex> lock(iMutex);
if (nullptr == instance) {
instance = new ListPrimes();
}
return instance;
}
void ListPrimes::listPrimes()
{
int64_t number = 0;
std::cin >> number;
if (1 > number) {
std::cout << "Invalid argument" << std::endl;
return ;
}
if ((2e9 + 14) < number) {
std::cout << "Invalid argument" << std::endl;
return ;
}
for (auto i = 2; i <= sqrt(number); i++) {
while (0 == number % i) {
std::cout << i << " ";
number /= i;
}
}
if (1 != number) {
std::cout << number << " ";
}
}
main.cpp
#include "ListPrimes.h"
int main(int argc, char** argv)
{
auto listPrimes = ListPrimes::getInstance();
listPrimes->listPrimes();
return 0;
}
測試
測試環境
visual studio 2019
測試結果
输入:180
输出:2 2 3 3 5
输入:1
输出:
输入:3
输出:3