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:97532468Sample Output:
97532468=2^2*11*17*101*1291
总觉得这道题目有点问题,要是输入的大数就是一个素数呢!肯定会超时啊!!!!晕~~~
思路:找出素数列表,依次与N判断即可
AC代码:
#include <iostream>
#include <vector>
#include <math.h>
using namespace std;
struct Node {
long value;
int countN;
};
vector<Node> arr(70);
vector<long> primeArr;
long N;
long isPrime(long n){
if(n==2)
return 1;
for(long i=2;i<=sqrt(n);i++){
if(n%i==0){
return 0;
}
}
return 1;
}
void findPrime(long n){
for(long i=2;i<=n;i++){
if(isPrime(i)){
primeArr.push_back(i);
}
}
}
int main()
{
cin>>N;
if(N==1){
cout<<"1=1";
return 0;
}
long cp = N;
findPrime(10000);
int index = 0;
for(long i=0;i<primeArr.size();i++){
if(N%primeArr[i]==0){
if(index==0){
arr[index].value = primeArr[i];
arr[index].countN++;
}else{
if(primeArr[i]==arr[index].value){
arr[index].countN++;
}else{
arr[++index].value = primeArr[i];
arr[index].countN++;
}
}
N /= primeArr[i];
i--;
if(N==1){
break;
}
}else{
if(arr[index].countN>0){
index++;
}
}
}
cout<<cp<<"=";
for(int i=0;i<index;i++){
if(arr[i].countN==1){
cout<<arr[i].value<<"*";
}
if(arr[i].countN>1){
cout<<arr[i].value<<"^"<<arr[i].countN<<"*";
}
}
if(arr[index].countN==1){
cout<<arr[index].value;
}
if(arr[index].countN>1){
cout<<arr[index].value<<"^"<<arr[index].countN;
}
return 0;
}
寻找大整数的质因数分解
本文介绍了一种算法,用于找到任意正整数的质因数,并以特定格式输出结果。对于输入的任意正整数N,算法会输出其质因数分解形式,包括每个质因数及其指数。
1866

被折叠的 条评论
为什么被折叠?



