质数分解

质数分解

关键函数在于循环中的break语句;

需要注意的是,break语句的存在会让程序跳出当前的循环,如果是嵌套循环,组合跳出当前break存在的最里层的嵌套循环

#include<iostream>
using namespace std;
int main(){
	int a;
	while (cin >> a){
		while (a != 1){
			for (int i = 2; i <= a; i++){
				if (a % i == 0){
					cout << i << " ";
					a = a / i;
					break;
				}
			}
		}
	}
	return 0;
}

 

素数分解,也就是将一个正整数分解为若干个质数的乘积。下面介绍两种实现素数分解的方法及对应的代码: ### 方法一:简单循环法 此方法的核心思路是,从最小的质数2开始,不断地尝试将待分解的数字除以该质数,若能整除,则该质数为一个质因数,更新待分解的数字,继续用该质数尝试,直到不能整除为止,再将除数加1继续尝试,直到待分解数字变为1。 ```c #include <stdio.h> int main() { int num; int sum = 0; // 用于统计分解出的质因数的个数 printf("请输入一个需要分解质因数的数字: "); scanf("%d", &num); printf("%d = ", num); int divisor = 2; while (num > 1) { if (num % divisor == 0) { printf("%d", divisor); sum++; num /= divisor; if (num > 1) { printf(" * "); } } else { divisor++; } } printf("\n质因数的个数为: %d\n", sum); return 0; } ``` ### 方法二:结合素数判断函数 该方法先定义一个判断素数的函数,在主函数中,先判断输入的数字是否为素数,若为素数则直接输出,若不是素数,则通过循环进行分解。 ```c #include <stdio.h> // 判断一个数是否为素数 int isPrime(int i) { int ret = 1; int k; for (k = 2; k < i - 1; k++) { if (i % k == 0) { ret = 0; break; } } return ret; } int main(void) { int n; scanf("%d", &n); printf("%d = ", n); int j = 2; if (isPrime(n) == 1) { printf("%d", n); } if (isPrime(n) == 0) { while (n > 1) { if (n % j == 0) { printf("%d", j); if (j <= n / 2) { printf("x"); } n /= j; } else { j++; } } } return 0; } ``` ### 代码解释 - **方法一**:通过一个`while`循环,从2开始作为除数,不断尝试将`num`除以除数,若能整除则输出该除数,并更新`num`,若不能整除则将除数加1,直到`num`变为1。 - **方法二**:先定义了`isPrime`函数用于判断一个数是否为素数,在`main`函数中,先判断输入的`n`是否为素数,若是则直接输出,若不是则通过循环进行分解
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值