分解素因子
欢迎进入我的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;
}
本题感悟
本块内容可能来自课本或其他网站,若涉及侵权问题,请联系我进行删除,谢谢大家啦~
本题还蛮简单的,就是绕来绕去,变量的域弄错了。
还有思路要记一下
- 因为要判断2 * 2 * 2这样子的情况,所以j++不能写在for()里,不然就没有那么多2了
- 在输出方面,开头的数字单个输出,之后的先输出*号,再输出数字,所以用到flag
- 判断是否是质数,判断其也没有除了1和他本身以外的因子,只要有一个就不是质数了
以上。