Article directory
Question 253.2022 Winter Holiday Ladder Competition Training-7-2 Decomposition of Prime Factors (20 points)
1. The topic
2. Problem solving
//直接试除法分解质因数,时间复杂度为O(sqrt(N))
#include <bits/stdc++.h>
using namespace std;
int main()
{
int a,b;
cin>>a>>b;
for(int i=a;i<=b;i++)
{
printf("%d=",i);
int num=i;
int flag=0;
for(int j=2;j*j<=i;)
{
if(num%j==0)
{
if(flag)
{
putchar('*');
}
printf("%d",j);
num/=j;
if(num==1)
{
break;
}
flag=1;
}
else
{
j++;
}
}
if(num>1)
{
if(flag)
{
putchar('*');
}
printf("%d",num);
}
putchar('\n');
}
}
//先用线性筛法得到素数表的分解质因数,时间复杂度为O(sqrt(N/lnN))
#include <bits/stdc++.h>
using namespace std;
const int maxn=1e6+1;
int p[maxn],vis[maxn];
int cnt;
void isPrime(int n)
{
for(int i=2;i<=n;i++)
{
if(!vis[i])
{
p[++cnt]=i;
}
for(int j=1;j<=cnt;j++)
{
if(p[j]*i>n)
{
break;
}
vis[p[j]*i]=1;
if(i%p[j]==0)
{
break;
}
}
}
}
int main()
{
isPrime(sqrt(10001));
int a,b;
cin>>a>>b;
for(int i=a;i<=b;i++)
{
printf("%d=",i);
int lim=sqrt(i);
int num=i;
int flag=0;
for(int j=1;j<=cnt&&p[j]<=lim;)
{
if(num%p[j]==0)
{
if(flag)
{
putchar('*');
}
printf("%d",p[j]);
num/=p[j];
if(num==1)
{
break;
}
flag=1;
}
else
{
j++;
}
}
if(num>1)
{
if(flag)
{
putchar('*');
}
printf("%d",num);
}
putchar('\n');
}
}