程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> poj1365 Prime Land

poj1365 Prime Land

編輯:C++入門知識

數字的質因子分解。。

 


Code:


 
 

#include <cmath>  
#include <cstdio>  
#include <cstring>  
#include <iostream>  
using namespace std; 
 
typedef long long LL; 
int main() { 
    LL n, p, t, i; 
    int pri[100], e[100]; 
    while (true) { 
        cin >> p; 
        n = 1; 
        while (0 != p) { 
            cin >> t; 
            n *= pow(p, t); 
            if (getchar() == '\n') break; 
            cin >> p; 
        } 
        if (p == 0) break; 
        int cnt = 0; 
        --n; 
//        printf("%d\n",n);  
        int k = 2; 
        memset(e, 0, sizeof(e)); 
        while (k <=sqrt(n)) { 
            if (n % k == 0) { 
                pri[cnt] = k; 
                while (n % k == 0) { 
                    e[cnt]++; 
                    n /= k; 
                } 
//                printf("%d %d\n",pri[cnt], e[cnt]);  
                cnt++; 
            } 
            if (k != 2) k += 2; 
            else k++; 
        } 
        if(n>1) 
        { 
            pri[cnt] = n; e[cnt]++; 
            cnt++; 
        } 
        for (i = cnt-1; i >0; i--) 
            printf("%d %d ", pri[i], e[i]); 
        printf("%d %d\n",pri[0],e[0]); 
    } 
    return 0; 
} 

#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;

typedef long long LL;
int main() {
    LL n, p, t, i;
    int pri[100], e[100];
    while (true) {
        cin >> p;
        n = 1;
        while (0 != p) {
            cin >> t;
            n *= pow(p, t);
            if (getchar() == '\n') break;
            cin >> p;
        }
        if (p == 0) break;
        int cnt = 0;
        --n;
//        printf("%d\n",n);
        int k = 2;
        memset(e, 0, sizeof(e));
        while (k <=sqrt(n)) {
            if (n % k == 0) {
                pri[cnt] = k;
                while (n % k == 0) {
                    e[cnt]++;
                    n /= k;
                }
//                printf("%d %d\n",pri[cnt], e[cnt]);
                cnt++;
            }
            if (k != 2) k += 2;
            else k++;
        }
        if(n>1)
        {
            pri[cnt] = n; e[cnt]++;
            cnt++;
        }
        for (i = cnt-1; i >0; i--)
            printf("%d %d ", pri[i], e[i]);
        printf("%d %d\n",pri[0],e[0]);
    }
    return 0;
}


 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved