C++,Migrated from Lutece 2015 质因子分解

/*
Migrated from Lutece 2015 质因子分解
Description
读入一个自然数n, 将n分解为质因子连乘的形式输出.

Input
有多组测试数据. 输入的第一行是整数T(0<T<=10000), 表示测试数据的组数. 每一组测试数据只有一行, 由待分解的自然数n构成. 1<n<2^31.

Output
对应每组输入, 输出一行分解结果, 具体样式参看样例.
*/  
// #include <iostream>
// #include <vector>
// #include <climits>
// void solve(){
//     int num;std::cin>>num;
//     std::cout<<num<<"=";
//     for(int i = 2;)
// }
// int main(){
//     int T;std::cin>>T;
//     while(T--){
//         solve();
//     }
// }

#include <iostream>
#include <vector>
#include <cmath>

void solve() {
    long long num;std::cin >> num;
    std::cout << num << "=";

    bool first = true;
    for (long long i = 2; i * i <= num; ++i) {
        //num = a*b, a<=b, a<=sqrt(num), b>=sqrt(num)
        //若num的质因子中有大于sqrt(num)的数,则其它所有的质因子均小于sqrt(num)
        while (num % i == 0) {
            if (!first) {
                std::cout << "*";
            }
            std::cout << i;
            num /= i;
            first = false;
        }
    }
    if (num > 1) {
        if (!first) {
            std::cout << "*";
        }
        std::cout << num;
    }
    std::cout << std::endl;
}

int main() {
    int T;
    std::cin >> T;
    while (T--) {
        solve();
    }
    return 0;
}



// void printPrime(){
//     std::vector<unsigned int> prime{2};
//     for(int i = 3;prime.back()<10000;++i){
//         bool isPrime=true;
//         for(int j=0;j<prime.size();j++){
//             if(i%prime[j]==0){
//                 isPrime=false;
//                 break;
//             }
//         }
//         if(isPrime){
//             prime.push_back(i);
//         }
//     } 
//     std::cout<<"unsigned int primes["<<prime.size()<<"]={";
//     for(int i = 0;i<prime.size()-1;++i)std::cout<<prime[i]<<",";
//     std::cout<<prime.back()<<"};"<<std::endl;
// }

// 埃拉托色尼筛法,生成所有小于等于给定数n的质数
// 埃拉托色尼筛法的基本思想是从最小的质数开始,标记其所有倍数为合数,
// 然后继续处理下一个未标记的数,直到处理完所有小于等于 n 的数
// std::vector<unsigned int> sieve(unsigned int max) {
//     std::vector<bool> is_prime(max + 1, true);
//     is_prime[0] = is_prime[1] = false; // 0 和 1 不是质数

//     for (unsigned int i = 2; i * i <= max; ++i) {
//         if (is_prime[i]) {
//             for (unsigned int j = i * i; j <= max; j += i) {
//                 is_prime[j] = false;
//             }
//         }
//     }

//     std::vector<unsigned int> primes;
//     for (unsigned int i = 2; i <= max; ++i) {
//         if (is_prime[i]) {
//             primes.push_back(i);
//         }
//     }
//     return primes;

// }
posted @ 2025-03-12 19:13  Kazuma_124  阅读(37)  评论(0)    收藏  举报