申明
再次申明这个专栏只是分享博主学习算法时的顺序,给新手提供一个入门的好方法(博主现在也是新手所以博主写的代码适合C转C++的新手学习),具体算法逻辑需要自己学习,代码区域有部分解释,因此有错误可以私信或者直接在评论区骂。再次申明这个专栏只是分享博主学习算法时的顺序,给新手提供一个入门的好方法(博主现在也是新手所以博主写的代码适合C转C++的新手学习),具体算法逻辑需要自己学习,代码区域有部分解释,因此有错误可以私信或者直接在评论区骂。
介绍
质数是指只能被1和本身除尽的数,a的因数是指能整除a的数,因此质因数是指能整除a的是质数的因数,在研究质因数时,我们通常不仅需要研究他的值,还有研究a能整除他几次。
题目链接
板子代码
#include<iostream>
#include<algorithm>
#include<queue>
#include<cstring>
#include<string>
#include<unordered_map>
using namespace std;
typedef long long ll;
const int N=1e3+10;
struct node
{
int num;
int sum;
}q[N];
int n,idx;
int main()
{
scanf("%d",&n);
int go=n;
for(int i=2;i<=n/i;i++)
{
while(n%i==0)
{
q[idx].num=i;
q[idx].sum++;
n/=i;
if(n%i!=0) idx++;
}
}
if(n!=go) q[idx].num=n,q[idx].sum=1,idx++;
for(int i=0;i<idx;i++)
printf("%d %d\n",q[i].num,q[i].sum);
return 0;
}
题目代码
#include<iostream>
#include<algorithm>
#include<queue>
#include<cstring>
#include<string>
#include<unordered_map>
using namespace std;
typedef long long ll;
const int N=1e6+10;
struct node
{
ll num;
ll sum;
}q[N];
ll n,idx;
ll arr[N];
int main()
{
scanf("%lld",&n);
ll go=n;
for(ll i=2;i<=n/i;i++)
{
while(n%i==0)
{
q[idx].num=i;
q[idx].sum++;
n/=i;
if(n%i!=0) idx++;
}
}
if(n!=go) q[idx].num=n,q[idx].sum=1,idx++;
if(idx==0)
{
printf("%lld",n);
return 0;
}
for(ll i=0;i<idx;i++)
{
if(q[i].sum>1) printf("%lld^%lld",q[i].num,q[i].sum);
else printf("%lld",q[i].num);
if(i!=idx-1) printf(" * ");
}
return 0;
}