思路:先求出100以内的所有素数存入数组s中,用键盘接收到的数依次除以s中的每一位数,如果能整除则记录该因子并用goto语句继续求解,如果不能整除则尝试除以s中的下一个数,直到s中的最后一个数。
上代码!!
#include<stdio.h>
#include<stdbool.h>
int* factor(int num);
bool judge_prime(int num1);
int main(void) {
int number;
printf("请输入一个整数:");
scanf_s("%d", &number); //编译器不是Visual Studio的话用scanf就行
int* end_factor = factor(number);
for (int i = 0; end_factor[i] != 0; i++)
{
printf("%d", end_factor[i]);
if (end_factor[i + 1] != 0)
{
printf("*");
}
}
return 0;
}
int* factor(int num) {
int i = 0;
int s[100];
for (i = 0; i < 100; i++) //数组初始化,这个数组是用来储存素数的
{
s[i] = 0;
}
int j = 0;
for (i = 2; i <= 100; i++)
{
if (judge_prime(i)) //把1到100内的素数存到数组s中
{
s[j] = i;
j++;
}
}
int factor[100], f = 0;
for (int i = 0; i < 100; i++) //数组初始化,这个factor数组是用来储存解出来的质因子的
{
factor[i] = 0;
}
for (int i = 0; s[i] != 0; i++) //如果这个数本身就是素数,那么它就没有质因子分解式
{
if (num == s[i])
{
printf("这个数没有质因式噢");
return;
}
}
printf("这个数的质因子分解式为:%d = ", num);
for (int i = 0; s[i] != 0; i++)
{
flag:
if (num % s[i] == 0) //思路里的内容
{
factor[f] = s[i];
f++;
num = num / s[i];
goto flag;
}
}
return factor; //返回factor这个数组
}
//下面这个函数是判断素数的, 不懂可以看我主页
bool judge_prime(int num1) {
int flag = 1;
for (int i = 2; i < num1; i++)
{
if (num1 % i == 0)
{
flag = 0;
}
}
if (flag == 0)
{
return false;
}
else
{
return true;
}
}
注意,输入的数是有一个范围的,能输入多大取决于你存素数的数组里存有多少素数,比如,你存了1到1000内的素数,那么你输入1到1000内的数它都可以正确判断。)