patA1059 Prime Factors
这个问题叫做质因子分解,花了大概两个小时写对了。这道题细节挺多的,书上提到了几点,一个是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的更多相关文章
- [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. 这道题跟 ...
- 1059. Prime Factors (25)
时间限制 50 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 HE, Qinming Given any positive integer N, y ...
- PAT 1059. Prime Factors (25) 质因子分解
题目链接 http://www.patest.cn/contests/pat-a-practise/1059 Given any positive integer N, you are suppose ...
- 2014辽宁ACM省赛 Prime Factors
问题 L: Prime Factors 时间限制: 1 Sec 内存限制: 128 MB [提交][状态][论坛] 题目描写叙述 I'll give you a number , please te ...
- PAT1059:Prime Factors
1059. Prime Factors (25) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 HE, Qinming Given ...
- A1059. Prime Factors
Given any positive integer N, you are supposed to find all of its prime factors, and write them in t ...
- PAT 甲级 1059 Prime Factors
https://pintia.cn/problem-sets/994805342720868352/problems/994805415005503488 Given any positive int ...
- PAT 1059 Prime Factors[难]
1059 Prime Factors (25 分) Given any positive integer N, you are supposed to find all of its prime fa ...
- pat1059. Prime Factors (25)
1059. Prime Factors (25) 时间限制 50 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 HE, Qinming Given ...
随机推荐
- org.apache.spark.rpc.RpcTimeout$$anonfun$1.applyOrElse
跑sparkPis示例程序 [root@node01 bin]# ./spark-submit --master spark://node01:7077 --class org.apache.spar ...
- 解决 RecyclerView 在Android Studio已经导入情况下还无法实例引用问题
系统:Windows 10 IDE::android studio 1. 问题:RecyclerView 在Android Studio已经导入情况下还无法实例引用问题 由于RecyclerView是 ...
- 分布式版本控制系统-git
Git是目前世界上最先进的分布式版本控制系统 SVN是集中式的版本控制系统,而Git是分布式版本控制系统,集中式和分布式版本控制系统有什么区别呢?这个可以找度娘...... 1.安装Git yum i ...
- 怎样设置高效的IIS
适用的IIS版本:IIS 7.0, IIS 7.5, IIS 8.0 适用的Windows版本:Windows Server 2008, Windows Server 2008 R2, Windows ...
- fillder---断言,更改提交数据
1.before requests:请求的发送前拦截,此时可以修改提交的表单.cookies.header头数据 在URL请求前,设置为before requests 2.after response ...
- Codeforces 715B. Complete The Graph 最短路,Dijkstra,构造
原文链接https://www.cnblogs.com/zhouzhendong/p/CF715B.html 题解 接下来说的“边”都指代“边权未知的边”. 将所有边都设为 L+1,如果dis(S,T ...
- Intervals 差分约束
题意:给定n个区间[Li,Ri]以及n个整数vi. 现在要有一个集合,使得这个集合和任意[Li,Ri]都有 至少 vi个元素相同. 问这个集合最少要几个元素. 定义S(x) 表示[1,x]中选择的元素 ...
- 【Spring Boot】关于上传文件例子的剖析
目录 Spring Boot 上传文件 功能实现 增加ControllerFileUploadController 增加ServiceStorageService 增加一个Thymeleaf页面 修改 ...
- C#中new的三种用法
在 C# 中,new 关键字可用作运算符.修饰符或约束. 1)new 运算符:用于创建对象和调用构造函数. 2)new 修饰符:在用作修饰符时,new 关键字可以显式隐藏从基类继承的成员. 3)new ...
- NEO GUI 多方签名使用
众所周至,NEOGUI是一个开发者演示用钱包,使用体验是非常的不友好的. 今天本来打算使用多方签名账户,发现和想象的不一样,请教了小伙伴也不行.遂调试了一下原因,发现踩进坑里了. 把这个问题记 ...