这个问题叫做质因子分解,花了大概两个小时写对了。这道题细节挺多的,书上提到了几点,一个是n=1的话需要特判。有一个很容易错的点就是n一开始要先用一个变量保存起来,不保存的话后面有点麻烦,所以建议还是先保存起来。因为过程中要不断的改变n,最后还要打印出n,如果n为1的话还要特殊处理。当然也可以一开始处理打印,不过我觉得和思维颠倒有些难受。一个很重要的问题就是打印的素数表需要多大,这个我也不清楚怎么办,所以先写出来看,随机应变,如果不能完全覆盖的话再往上加,最后完全覆盖了那个样例。最后解决的细节是当我输入2的时候一开始只探测到根号2导致问题没有解。其实根本没必要,因为有break来控制着for循环的结束条件。所以i<num的所有数字都正常输出就好。

最重要的思想就是把这个数分解成两种情况,一种是都小于sqrt(n)的很多个因子,另一种是一些小于sqrt(n)然后 只有一个 大于sqrt(n)的两部分。

一个很重要的思想就是设计结构体以及结构体数组,这个思想还是挺重要的。

#include<cstdio>
#include<math.h>
const int maxn = ;
using namespace std;
struct factor
{
int x;
int cnt = ;
}fac[];
int num = ;
bool p[] = { };
int prime[];
void findprime()//获取素数表
{
int i, j;
for (i = ; i *i< maxn; i++)
{
if (p[i] == false)
{
prime[num] = i;
num++;
for (j = i + i; j *j < maxn; j += i)
{
p[j] = true;
}
}
}
}
int main()
{
int n;
int temp;
scanf("%d", &n);
temp = n;
findprime();
int i;
int sum = ;
for (i = ; i<num; i++)
{
int x = n;
while (n % prime[i] == )
{
n /= prime[i];
fac[sum].x = prime[i];
fac[sum].cnt++;
}
if (x%prime[i] == )
{
sum++;
}
if (n == )
break;
}
if (n != )
{
fac[sum].x = n;
fac[sum].cnt = ;
}
printf("%d=", temp);
if (temp == )
{
printf("1\n");
}
else
for (i = ; i < sum; i++)
{
if (i != sum - && fac[i].cnt > )//不是最后一个
{
printf("%d^%d*", fac[i].x, fac[i].cnt);
}
else if (i != sum - && fac[i].cnt == )
{
printf("%d*", fac[i].x);
}
else if (i == sum - && fac[i].cnt == )//是最后一个且cnt只有一个
{
printf("%d\n", fac[i].x);
}
else//最后一个cnt有两个
printf("%d^%d\n", fac[i].x, fac[i].cnt);
}
}

patA1059 Prime Factors的更多相关文章

  1. [CareerCup] 7.7 The Number with Only Prime Factors 只有质数因子的数字

    7.7 Design an algorithm to find the kth number such that the only prime factors are 3,5, and 7. 这道题跟 ...

  2. 1059. Prime Factors (25)

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

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

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

  4. 2014辽宁ACM省赛 Prime Factors

    问题 L: Prime Factors 时间限制: 1 Sec  内存限制: 128 MB [提交][状态][论坛] 题目描写叙述 I'll give you a number , please te ...

  5. PAT1059:Prime Factors

    1059. Prime Factors (25) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 HE, Qinming Given ...

  6. A1059. Prime Factors

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

  7. PAT 甲级 1059 Prime Factors

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

  8. PAT 1059 Prime Factors[难]

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

  9. pat1059. Prime Factors (25)

    1059. Prime Factors (25) 时间限制 50 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 HE, Qinming Given ...

随机推荐

  1. org.apache.spark.rpc.RpcTimeout$$anonfun$1.applyOrElse

    跑sparkPis示例程序 [root@node01 bin]# ./spark-submit --master spark://node01:7077 --class org.apache.spar ...

  2. 解决 RecyclerView 在Android Studio已经导入情况下还无法实例引用问题

    系统:Windows 10 IDE::android studio 1. 问题:RecyclerView 在Android Studio已经导入情况下还无法实例引用问题 由于RecyclerView是 ...

  3. 分布式版本控制系统-git

    Git是目前世界上最先进的分布式版本控制系统 SVN是集中式的版本控制系统,而Git是分布式版本控制系统,集中式和分布式版本控制系统有什么区别呢?这个可以找度娘...... 1.安装Git yum i ...

  4. 怎样设置高效的IIS

    适用的IIS版本:IIS 7.0, IIS 7.5, IIS 8.0 适用的Windows版本:Windows Server 2008, Windows Server 2008 R2, Windows ...

  5. fillder---断言,更改提交数据

    1.before requests:请求的发送前拦截,此时可以修改提交的表单.cookies.header头数据 在URL请求前,设置为before requests 2.after response ...

  6. Codeforces 715B. Complete The Graph 最短路,Dijkstra,构造

    原文链接https://www.cnblogs.com/zhouzhendong/p/CF715B.html 题解 接下来说的“边”都指代“边权未知的边”. 将所有边都设为 L+1,如果dis(S,T ...

  7. Intervals 差分约束

    题意:给定n个区间[Li,Ri]以及n个整数vi. 现在要有一个集合,使得这个集合和任意[Li,Ri]都有 至少 vi个元素相同. 问这个集合最少要几个元素. 定义S(x) 表示[1,x]中选择的元素 ...

  8. 【Spring Boot】关于上传文件例子的剖析

    目录 Spring Boot 上传文件 功能实现 增加ControllerFileUploadController 增加ServiceStorageService 增加一个Thymeleaf页面 修改 ...

  9. C#中new的三种用法

    在 C# 中,new 关键字可用作运算符.修饰符或约束. 1)new 运算符:用于创建对象和调用构造函数. 2)new 修饰符:在用作修饰符时,new 关键字可以显式隐藏从基类继承的成员. 3)new ...

  10. NEO GUI 多方签名使用

    众所周至,NEOGUI是一个开发者演示用钱包,使用体验是非常的不友好的. 今天本来打算使用多方签名账户,发现和想象的不一样,请教了小伙伴也不行.遂调试了一下原因,发现踩进坑里了.     把这个问题记 ...