题意:

给出一个int型正整数N,要求把N分解成若干个质因子,如N=97532468,则把N分解成:97532468=2^2*11*17*101*1291。质因子按增序输出,如果某个质因子的幂是1,则1不输出。

思路:质因子分解的基础题。

首先,定义如下因子的结构体,用于存放最终的结果。因为N是一个int范围的正整数,由于2*3*5*7*11*13*17*19*23*29>INT_MAX,也就是说,任意一个int型整数,可分解出来的不同的质因子的个数不会超过10个,因此,数组只要开到10就够了。

struct Factor{
    int fac;//质因子
    int cnt;//质因子出现的次数
}factor[];

在对正整数N进行分解之前,首先要获取素数表,令其存在数组prime中,这样一来,则逐个判断这个prime数组中的素数,若整除,则一直用N除以当前这个素数,记录这个素数出现的次数,除到不能整除为止,再进入下一个素数的判断。

但是,如果我们要求N=2,147,483,647(INT_MAX)的质因子呢?难道需要求出所有整型的素数吗?这样做当然没有错,但却会超时(判断素数的时间复杂度是O(sqrt(N)),枚举获取1~N的全部素数的时间复杂度是O(N),因此总的时间复杂度是O(N*sqrt(N)),若N>10^5基本就超时了),事实上,对于质因子分解,需要明白这样一个事实——

对于任何一个整数,如果它是素数,则不可被分解,因子只有1和其本身;如果它是合数,则除了1和本身之外,它的因子必然是在sqrt(n)两侧成对出现的,此时,这些质因子要么全部小于等于sqrt(n);要么只存在一个质因子大于sqrt(n),而其他质因子全部小于等于sqrt(n)。基于此,我们考虑,int型的最大值是2,147,483,647,而sqrt(2,147,483,647)≈46,341,根据刚才所说的结论,也就是说一个int型整数若不能被46341以内的素数整除的话,说明因子就是其本身了。因此,我在获取素数表的getPrime()函数中直接硬编码了。

代码:

#include <stdio.h>
#include <math.h>
#include <vector>
using namespace std;

struct Factor{
    int fac;//质因子
    int cnt;//质因子出现的次数
}factor[];

vector<int> prime;//素数表

//判断素数
bool isPrime(int n)
{
    ) return false;
    int sqr=(int)sqrt(n);
    ;i<=sqr;i++)
        ) return false;
    return true;
}

//获取素数表,打表思想
void getPrime()
{
    ;i<;i++)
        if(isPrime(i)) prime.push_back(i);
}

int main()
{
    int val;
    scanf("%d",&val);
    getPrime();
    int temp=val;
    ;//factor数组的长度
    ;i<prime.size();i++){
        int p=prime[i];
        ){
            factor[len].fac=p;
            factor[len].cnt=;
            ){
                factor[len].cnt++;
                temp/=p;
            }
            len++;
            ) break;//表示除尽
        }
    }
    ){//考虑存在因子大于sqrt(n)的情况(有可能是素数,有可能不是素数,如9998=2*4999)
        factor[len].fac=temp;
        factor[len].cnt=;
        len++;
    }
    printf("%d=",val);
    ) printf(");
    ;i<len;i++){
        printf("%d",factor[i].fac);
        ) printf("^%d",factor[i].cnt);
        ) printf("*");
    }
    ;
}

1059 Prime Factors的更多相关文章

  1. PAT 1059 Prime Factors[难]

    1059 Prime Factors (25 分) Given any positive integer N, you are supposed to find all of its prime fa ...

  2. PAT 甲级 1059 Prime Factors (25 分) ((新学)快速质因数分解,注意1=1)

    1059 Prime Factors (25 分)   Given any positive integer N, you are supposed to find all of its prime ...

  3. 1059 Prime Factors (25分)

    1059 Prime Factors (25分) 1. 题目 2. 思路 先求解出int范围内的所有素数,把输入x分别对素数表中素数取余,判断是否为0,如果为0继续除该素数知道余数不是0,遍历到sqr ...

  4. PAT 1059. Prime Factors (25) 质因子分解

    题目链接 http://www.patest.cn/contests/pat-a-practise/1059 Given any positive integer N, you are suppose ...

  5. 1059. Prime Factors (25)

    时间限制 50 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 HE, Qinming Given any positive integer N, y ...

  6. PAT 甲级 1059 Prime Factors

    https://pintia.cn/problem-sets/994805342720868352/problems/994805415005503488 Given any positive int ...

  7. 1059 Prime Factors(25 分)

    Given any positive integer N, you are supposed to find all of its prime factors, and write them in t ...

  8. PAT Advanced 1059 Prime Factors (25) [素数表的建⽴]

    题目 Given any positive integer N, you are supposed to find all of its prime factors, and write them i ...

  9. PAT甲题题解-1059. Prime Factors (25)-素数筛选法

    用素数筛选法即可. 范围long int,其实大小范围和int一样,一开始以为是指long long,想这就麻烦了该怎么弄. 而现在其实就是int的范围,那难度档次就不一样了,瞬间变成水题一枚,因为i ...

随机推荐

  1. 报错HTTP Status 500 - HHH000142: Javassist Enhancement failed: cn.itcast.entity.Customer; nested exception is org.hibernate.HibernateException: HHH000142: Javassist Enhancement failed: cn.itcast.entity.

    报错 type Exception report message HHH000142: Javassist Enhancement failed: cn.itcast.entity.Customer; ...

  2. yii2:oracle date类型字段的写入或查询

    insert: insert into tabname(datecol) value(sysdate) ; -- 用date值 insert into tabname(datecol) value(s ...

  3. Django进阶Model篇002 - 模型类的定义

    一.创建数据模型. 实例: 作者模型:一个作者有姓名. 作者详情模型:把作者的详情放到详情表,包含性别.email 地址和出生日期,作者详情模型与作者模型之间是一对一的关系(OneToOneField ...

  4. poj1330lca入门题

    直接套模板,dfs的时候注意起点 #include<map> #include<set> #include<cmath> #include<queue> ...

  5. git网站

    https://backlog.com/git-tutorial/cn/   ------------------------------------------------------------- ...

  6. DDOS工具合集---CC 2.0(僵尸网络proxy,单一url,可设置cookie,refer),传奇克星(代理+单一url,可设置cookie),NetBot_Attacker网络僵尸1.0(僵尸网络,HTTP NO-Cache Get攻击模式,CC攻击,HTTP空GET请求攻击),傀儡僵尸VIP1.4版(僵尸网络,动态单一url)、上兴网络僵尸2.3、中国制造网络僵尸、安全基地网络僵尸==

    DDOS工具合集 from:https://blog.csdn.net/chinafe/article/details/74928587 CC 著名的DDOS CC工具,效果非常好!CC 2.0使用了 ...

  7. [eShopOnContainers 学习系列] - 00 - 开发环境需求

    开发环境需求 https://github.com/dotnet-architecture/eShopOnContainers/wiki/00.-Dev-machine-requirements 我的 ...

  8. springmvc用来绑定参数的注解(转)

    引言: 原文链接:http://blog.csdn.net/kobejayandy/article/details/12690161 接上一篇文章,对@RequestMapping进行地址映射讲解之后 ...

  9. java中常用的帮助类。加快开发速度

    数据库帮助类 package com.cwnu.uitl; import java.sql.*; /** * 数据库基础操作实现类 * * @author BlackWinter * * @date ...

  10. TreeView.ImageSet 属性

    TreeView.ImageSet 属性 .NET Framework 2.0         注意:此属性在 .NET Framework 2.0 版中是新增的. 获取或设置用于 TreeView  ...