设为首页 加入收藏

TOP

poj1365 Prime Land
2014-11-23 20:00:42 来源: 作者: 【 】 浏览:10
Tags:poj1365 Prime Land

数字的质因子分解。。


Code:



#include   
#include   
#include   
#include   
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 
#include 
#include 
#include 
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;
}


 

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇结构体之间的强制类型转换 下一篇POJ2151:Check the difficulty o..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Python爬虫教程(从 (2025-12-26 16:49:14)
·【全269集】B站最详 (2025-12-26 16:49:11)
·Python爬虫详解:原 (2025-12-26 16:49:09)
·Spring Boot Java: (2025-12-26 16:20:19)
·Spring BootでHello (2025-12-26 16:20:15)