质因素分解

质因素分解

问题描述

给定一个正整数N,将他分解成N=p1^k1*p2^k2*...*pm^km.其中p1...

输入格式:

输入正整数N(1~N~2^63-1)

输出格式:

输出分解的表达式

输入示例:

97532468

输出示例:

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

代码如下:

#include 
#include 
#include 
const int maxn = 1000000;
int p[maxn];    // 保存素数 
int e[maxn];    // 保存相应的次数
//  p[0] = 2;
// e[0]  = 2;
int cnt = 0;
bool isPrime(int x) {
    int m = sqrt(x+0.5);
    for(int i=2; i<=m; i++) {
        if(x%i ==0) return false;
    }
    return true;
}
// 构造素数表 
void buildPrime() {
    for(int i=2; iif(isPrime(i)) {
            p[cnt++] = i;
        }
    }
}
int main() {
    buildPrime();
    long long n;
    scanf("%lld", &n);
    long long m = n;
    memset(e, 0, sizeof(e));     
    int x = sqrt(n+0.5);
    for(int i=0; i//循环检查n是否有质因子 
        while(n%p[i] == 0) {    // 如果可以整除当前的素数 
            e[i]++; // 当前的素数的次数加一 
            n /= p[i];  
        }
        if(n==1) break; // n=1表示n已经整除完成,后面的素数不能在被整除了,及时退出 
    }
    //  输出 
    bool first = true;
    printf("%lld=", m);
    for(int i=0; iif(e[i]>=1) {
            if(!first) printf("*");
            if(e[i]>1) {
                printf("%d^%d", p[i], e[i]);
            } else {
                printf("%d", p[i]);
            }
            first = false;
        } 
    } 
    if(n!=1) {  // 如果无法被根号n以内的素数除尽 
        printf("*%d\n", n); // 那么一定有且只有一个大于根号n的素因子 
    } 
    return 0;
}

输出结果:

97532468
97532468=2^2*11*17*101*1291
--------------------------------
Process exited after 99.56 seconds with return value 0
请按任意键继续. . .

你可能感兴趣的:(c++编程,算法,质因数分解,素数表,算法)