zoukankan      html  css  js  c++  java
  • PAT A1059

    PAT A1059

    标签(空格分隔): PAT


    解题思路 :先打印出素数表。利用结构体数组来存贮质因子的值和个数

    strcut factor{
        int x;    //值
        int cnt;  //个数
    }fac[20];
    
    • 如果i是x的质因子,就令fac[index].x = i(index是某个下标), fac[index].cnt = 0,然后 n = n / i。若又遇到i是x的质因子,则cnt++。
    • 进行完上述操作后,n != 1,则说明n还有一个大于sqrt(n)的质因子(可能就是sqrt(n)),我们需要加入这个值到fac[index]中,在将fac[index].cnt设为1;
    #include <cstdio>
    #include <math.h>
    
    const int maxn = 100010;
    bool is_prime(int n) {
        if(n == 1) return false;
        int sqr = (int)sqrt(1.0 * n);
        for(int i = 2; i <= sqr; i++) {
            if(n % i == 0) return false;
        }
        return true;
    }
    int prime[maxn], pNum;
    void Find_Prime() {
        for(int i = 1; i < maxn; i++) {
            if(is_prime(i) == true){
            prime[pNum++] = i;
            }
        }
    }
    struct factor {
        int x, cnt;
    }fac[10];
    
    int main() {
        Find_Prime();
        int n, num = 0;
        scanf("%d", &n);
        if (n == 1) printf("1=1");
        else {
            printf("%d=", n);
            int sqr = (int)sqrt(1.0 * n);
            for(int i = 0; i < pNum; i++) {
                if(n % prime[i] == 0) {
                    fac[num].x = prime[i];
                    fac[num].cnt = 0;
                    while(n % prime[i] == 0) {
                        fac[num].cnt++;
                        n /= prime[i];
                    }
                    num++;
                }
                if(n == 1) break;
            }
            if(n != 1) {
                fac[num].x = n;
                fac[num].cnt = 1;
            }
            for(int i = 0; i < num; i++) {
                if(i > 0) printf("*");
                printf("%d", fac[i].x);
                if(fac[i].cnt > 1) {
                    printf("^%d", fac[i].cnt);
                }
            }
        }
        return 0;
    }
    

    启示 :边写边测试,我写过用埃氏筛法得到素数表的时候,发现最后的结果是错的,
    结果我验证发现我的素数表是错误的,但埃氏筛法肯定是没有写错了,最后为什么素数表是错的,原因我也不知道,但是这可以为我后来做题提供经验,写出一个模块就验证一下功能。

  • 相关阅读:
    RAC一个节点自动重启问题分析
    Oracle Audit 审计总结
    oracle 11g日志审计
    在线剪辑歌曲
    转载:MySQL Cluster NDB(Mysql 集群)
    U 盘多系统安装盘制作神器YUMI
    转载:网站限制IP地址访问-精确到国家/省/市IP地址
    开源企业云盘Seafile部署
    K8S(二)-创建一个pod应用
    mariadb升级
  • 原文地址:https://www.cnblogs.com/Kirarrr/p/10355796.html
Copyright © 2011-2022 走看看