C语言求质因子分解式

思路:先求出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内的数它都可以正确判断。)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值