【PAT甲级 - C++题解】1059 Prime Factors

简介: 【PAT甲级 - C++题解】1059 Prime Factors

1059 Prime Factors

Given any positive integer N, you are supposed to find all of its prime factors, and write them in the format N = p1^k1×p2^k2×⋯×pm^km.

Input Specification:

Each input file contains one test case which gives a positive integer N in the range of long int.


Output Specification:

Factor N in the format N = p1^k1*p2^k2*…*pm^km, where pi’s are prime factors of N in increasing order, and the exponent ki is the number of pi – hence when there is only one pi, ki is 1 and must NOT be printed out.


Sample Input:

97532468

Sample Output:

97532468=2^2*11*17*101*1291


题意

给定一个整数 N NN ,找出它的所有质因子,并按如下格式输出:

N=p1k1×p2k2×...×pmkm


注意: 如果 N = 1 N=1N=1 则输出 1=1。


思路

我们可以直接从 2 22 往后遍历所有质数,然后计算是否是 n nn 的质因子。因为遍历是从小到大进行的,所以可以从 2 22 遍历到 n nn ,尽管遍历的不是质数,由于前面小的质数已经计算完,所以后面大的不是质数的数 n nn 一定不会整除它。


但是由于给定的数据范围比较大,直接遍历到 n nn 可能会超时,所以可以只遍历其所有约数,效果也是一样的,即从 2 22 遍历到 n \sqrt{n} n  。


代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    cin >> n;
    printf("%d=", n);
    if (n == 1)    puts("1");
    else
    {
        bool first = true;
        //遍历质数
        for (int i = 2; i <= n / i; i++)
            if (n % i == 0)  //判断是否能除尽
            {
                //计算能除尽该质因子的几次幂
                int k = 0;
                while (n % i == 0)   n /= i, k++;
                if (!first)  cout << "*";
                else    first = false;
                cout << i;
                if (k > 1) cout << "^" << k;
            }
        //如果n已经除不尽且大于1,也要输出到后面
        if (n > 1)
        {
            if (!first)  cout << "*";
            cout << n;
        }
    }
    return 0;
}


目录
相关文章
|
C++
【PAT甲级 - C++题解】1040 Longest Symmetric String
【PAT甲级 - C++题解】1040 Longest Symmetric String
66 0
|
算法 C++
【PAT甲级 - C++题解】1044 Shopping in Mars
【PAT甲级 - C++题解】1044 Shopping in Mars
82 0
|
C++
【PAT甲级 - C++题解】1117 Eddington Number
【PAT甲级 - C++题解】1117 Eddington Number
77 0
|
存储 C++ 容器
【PAT甲级 - C++题解】1057 Stack
【PAT甲级 - C++题解】1057 Stack
76 0
|
存储 C++
【PAT甲级 - C++题解】1055 The World‘s Richest
【PAT甲级 - C++题解】1055 The World‘s Richest
79 0
|
C++
【PAT甲级 - C++题解】1051 Pop Sequence
【PAT甲级 - C++题解】1051 Pop Sequence
80 0
|
人工智能 BI C++
【PAT甲级 - C++题解】1148 Werewolf - Simple Version
【PAT甲级 - C++题解】1148 Werewolf - Simple Version
137 0
|
1天前
|
存储 编译器 C语言
【c++丨STL】string类的使用
本文介绍了C++中`string`类的基本概念及其主要接口。`string`类在C++标准库中扮演着重要角色,它提供了比C语言中字符串处理函数更丰富、安全和便捷的功能。文章详细讲解了`string`类的构造函数、赋值运算符、容量管理接口、元素访问及遍历方法、字符串修改操作、字符串运算接口、常量成员和非成员函数等内容。通过实例演示了如何使用这些接口进行字符串的创建、修改、查找和比较等操作,帮助读者更好地理解和掌握`string`类的应用。
14 2
|
7天前
|
存储 编译器 C++
【c++】类和对象(下)(取地址运算符重载、深究构造函数、类型转换、static修饰成员、友元、内部类、匿名对象)
本文介绍了C++中类和对象的高级特性,包括取地址运算符重载、构造函数的初始化列表、类型转换、static修饰成员、友元、内部类及匿名对象等内容。文章详细解释了每个概念的使用方法和注意事项,帮助读者深入了解C++面向对象编程的核心机制。
33 5
|
14天前
|
存储 编译器 C++
【c++】类和对象(中)(构造函数、析构函数、拷贝构造、赋值重载)
本文深入探讨了C++类的默认成员函数,包括构造函数、析构函数、拷贝构造函数和赋值重载。构造函数用于对象的初始化,析构函数用于对象销毁时的资源清理,拷贝构造函数用于对象的拷贝,赋值重载用于已存在对象的赋值。文章详细介绍了每个函数的特点、使用方法及注意事项,并提供了代码示例。这些默认成员函数确保了资源的正确管理和对象状态的维护。
45 4