自己写题目的思路,如果有错请各位指出。
一、题目
二、代码
#include <stdio.h>
void fun(int n){
int n2 = n;
int i,a[10000]={0},t=0;
for(i=2; i<n; i++){ //原理:
while(n2%i == 0){ //判断循环:当该数可以分解时,说明不是素数
a[t] = i; //把可分解的数i存到a数组里面
t++;
n2 = n2/i; //n2更新:以i分解之后的数,再对该数分解(n2=8->第一次i=2,8=2*4,更新n2=4)
}
}
if(t == 0){ //说明该数是素数,直接输出
printf("%d",n);
}
else{ //不是素数,输出a数组里每个数
for(i=0; i<t; i++){
if(i == t-1){ //如果是最后一个数,后面没有*号
printf("%d",a[i]);
break;
}
printf("%d*",a[i]);
}
}
}
int main() {
int a,b;
int i;
scanf("%d %d",&a,&b); //输入数的区间
for(i=a; i<=b; i++){ //对区间每个数调用函数得出结果
printf("%d=",i);
fun(i);
printf("\n");
}
return 0;
}
三、思路
主函数:对区间每个数调用函数fun(),以得到结果
函数fun(): 分解该数
1、对于区间里的每个数n,它的质因数在【2,n)的范围里,用for逐一判断是不是n的质因数。(如果没有,说明该数n是素数)。
2、判断是不是n的质因数:n2%i == 0说明该数可以分解,质因数是i。
3、把可分解的数i存到a数组里面
4、n2更新:以i分解之后的数,再对该数分解(n2=8->第一次i=2,8=2*4,更新n2=4)
5、如果该数是素数,直接输出
6、如果该数不是素数,输出a数组里每个数 (质因数分解的数)
核心原理:
1、判断质因数有哪些(n2%i == 0)。
2、将分解到的质因数存到一个数组里。
四、运行通过截图
五、参考视频教程
我是看的b站一个up主的教程,她用的是java,不过思路很清晰,明白思路直接用C写就行。