1059 Prime Factors (25分)[质数判别][因数分解]
程序员文章站
2022-06-12 19:31:39
...
By Jalan
文章目录
知识工具需求
数学
数据结构和算法
语言
题干
分解质因数
这个题整儿八经要用Pillard’s Rho做,但是25分嘛,25.
输入条件
输出条件
例子
例1
输入
97532468
输出
97532468=2^2*11*17*101*1291
题解
第一次
思路
从2到sqrt去检测它是不是质数,是的话除除试试,能除就是因数.
输出
预期时间复杂度
挺多
编写用时
40分钟
代码
CPP
#include <bits/stdc++.h>
#include <stdio.h>
#include <vector>
using namespace std;
const int maxFactor = 10000;
bool isPrime(long int a)
{
if (a == 2 || a == 3)
{
return true;
}
if (a % 6 != 1 && a % 6 != 5)
{
return false;
}
int temp = sqrt(a);
for (int i = 5; i <= temp; i += 6)
{
if (a % i == 0 || a % (i + 2) == 0)
{
return false;
}
}
return true;
}
int main(int argc, char const *argv[])
{
long int n;
vector<long int> p(maxFactor);
vector<int> k(maxFactor);
scanf("%ld", &n);
int temp = sqrt(n);
if (n == 1 || isPrime(n))
{
printf("%d=%d", n, n);
return 0;
}
long int outn = n;
int factorCounter = 0;
for (int i = 2; i <= temp; i++)
{
if (isPrime(i))
{
long int rest;
while (1)
{
rest = n / i;
if (rest * i == n)
{
if (p[factorCounter] == i)
{
k[factorCounter]++;
}
else
{
factorCounter++;
p[factorCounter] = i;
k[factorCounter]++;
}
}
else
{
break;
}
n = rest;
}
}
}
if (n != 1)
{
factorCounter++;
p[factorCounter] = n;
k[factorCounter]++;
}
if (factorCounter == 0)
{
return 0;
}
else
{
printf("%ld=", outn);
for (int i = 1; i < factorCounter + 1; i++)
{
printf("%d", p[i]);
if (k[i] != 1)
{
printf("^%d", k[i]);
}
if (i != factorCounter)
{
printf("*");
}
}
}
return 0;
}
运行用时
结尾
看在我写了这么多注释的份上可以给我点个赞嘛,求求惹=]砰砰砰,给我加点写下去的油呀@aaa@qq.com
也欢迎关注我的CSDN账号呀,接下来两个月我应该会按这个格式更新所有的PTA甲级题目
**开心code每一天**
上一篇: Hibernate之主键生成策略
下一篇: 各位这句英文警告是什么意思?看不懂啊