蓝桥杯基础练习-分解质因数【c语言解答】

蓝桥杯基础练习-分解质因数

问题描述

  求出区间[a,b]中所有整数的质因数分解。

输入格式

  输入两个整数a,b。

输出格式

  每行输出一个数的分解,形如k=a1*a2*a3...(a1<=a2<=a3...,k也是从小到大的)(具体可看样例)

样例输入

3 10

样例输出

3=3
4=2*2
5=5
6=2*3
7=7
8=2*2*2
9=3*3
10=2*5

提示

  先筛出所有素数,然后再分解。

数据规模和约定

  2<=a<=b<=10000
------------------------------------------------------------------------------------------------------------------------------

 解题思路:任何非素数都能用素数乘积来表示,所以对非素数n进行从2到n进行求余得出第一个因数然后与sum相乘并保存sum中,(i=1就是重新从2循环)继续此操作直到sum和n相同。用数组来存放n的因数,。

--------------------------------------------------------------------------------------------------------------------------------

#include<stdio.h>
int fun(int n){                    //判断是否为素数;是就输出,不是返回1; 
    int i,temp;
    int ans=0;
    temp=n;
    for(i=2;i<=n/2;i++)
        if(n%i==0)
          ans=1;
    if(ans==0)
        printf("%d=%d\n",temp,temp);
       return ans;
}
void fun1(int n){           //非素数的因数分解; 
    int num[100];int i,j,temp;
    int k=0,ans=1,sum=1;
    temp=n;
        for(i=2;i<=n;i++){         //多次循环中找出因数为是素数的数。
            if(n%i==0){
                num[k]=i;
                sum*=i;
                n=temp/sum;
                if(n==1)
                break;
                i=1;                       //i=1,代表新一轮的循环从2开始。
                k++;
            }         
        }
    printf("%d=",temp);
    for(i=0;i<=k;i++){
        printf("%d",num[i]);
        if(i<k) printf("*");
    }
    printf("\n");
}
int main(){
    int  a,b,i;
    scanf("%d %d",&a,&b);
    for(i=a;i<=b;i++)
       if(fun(i))
          fun1(i);
          return 0;
}       

猜你喜欢

转载自blog.csdn.net/zsl20200217/article/details/123292068