Question 253.2022 Winter Holiday Ladder Competition Training-7-2 Decomposition of Prime Factors (20 points)


Question 253.2022 Winter Holiday Ladder Competition Training-7-2 Decomposition of Prime Factors (20 points)


1. The topic

insert image description here

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');
    }
}


Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=324345706&siteId=291194637