C语言之分解素因子

欢迎进入我的C语言世界

题目

Problem Description

假设x是一个正整数,它的值不超过65535(即1<x<=65535),请编写一个程序,将x分解为若干个素数的乘积。

Input

输入的第一行含一个正整数k (1<=k<=10),表示测试例的个数,后面紧接着k行,每行对应一个测试例,包含一个正整数x。

Output

每个测试例对应一行输出,输出x的素数乘积表示式,式中的素数从小到大排列,两个素数之间用“*”表示乘法。

Sample Input

2
11
9828

Sample Output

11
22333713

答案

下面展示 实现代码

#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;
int isPrime(int x)
{
    
    
	int flag1 = 0;
	for(int i = 2; i < x; i++)
	{
    
    
		if(x % i == 0)//判断x是否有除了1和本身以外的因子 
		{
    
    
			flag1 = 1;//若有,将flag置为1,x不是质数 
			break;
		}
	}
	if(flag1 == 0)//x没有除了1和本身以外的因子 
		return 1;//x是质数 
	else
		return 0;
}
int main()
{
    
    
	int K;
	while(scanf("%d",&K) != EOF)
	{
    
    
		for(int i = 0; i < K; i++)
		{
    
    
			int flag = 1;//标记是否是开头的数 
			int j;
			int x;
			scanf("%d",&x);
			if(isPrime(x))
			{
    
    
				cout << x << endl;
			}
			else
			{
    
    
				int n = x; 
				for(j = 2; j < x; )
				{
    
    
					if(isPrime(j))
					{
    
    
						if(n % j == 0)//j是n的因子
						{
    
    
							n = n / j;//计算n除了j以外的因子
							if(flag == 1) //这个j是第一个数 
							{
    
    
								cout << j;
								flag = 0;
							} 			
							else 
							{
    
    
								cout << "*" << j ;
							}			 
						} 
						else
						{
    
    
							j++;
						}
					}
					else
					{
    
    
						j++; 
					}
				}		
				cout << endl;
			} 

		}
	}
	return 0;
 } 

本题感悟

本块内容可能来自课本或其他网站,若涉及侵权问题,请联系我进行删除,谢谢大家啦~

本题还蛮简单的,就是绕来绕去,变量的域弄错了。
还有思路要记一下

  1. 因为要判断2 * 2 * 2这样子的情况,所以j++不能写在for()里,不然就没有那么多2了
  2. 在输出方面,开头的数字单个输出,之后的先输出*号,再输出数字,所以用到flag
  3. 判断是否是质数,判断其也没有除了1和他本身以外的因子,只要有一个就不是质数了

以上。

猜你喜欢

转载自blog.csdn.net/hongguoya/article/details/105576071