由于慕课的课后测验没有答案。
自己写的代码不知道正确不正确,所以详情各位亲们看一下
题目如图
自己的思路是先判断是否为质数,是质数就直接输出了,没啥好说的。
如果是非质数的话,先求该数字之前有多少个质数(多少个相当于质数数组的长度)。
然后把这些质数丢进一个数组里。
再通过将输入的数字对数组里的质数一个一个匹配,如果能够被数组里的某个质数整除,则输出该质数,然后将数组的序号初始化为1.
当数字自己最后除成了质数时,将最后的质数作为最后一位进行输出。
```java
package homework;
import java.util.Scanner;
public class The_7th_week_Composite {
//判断是否为质数
public static boolean Isprime( int a )
{
boolean prime = true;
int n;
n = (int)Math.sqrt(a);
for ( int i = 2 ; i <= n; i++)
{
if ( a % i == 0)
{
prime = false;
}
}
return prime;
}
// 分解质因数
public static void resolve_number( int number )
{
// 求出非质数number前有多少个质数
int length_prime = 1;
boolean is_prime = true;
for ( int i = 3; i <= number ; i++)
{
is_prime = true;
for ( int j = 2; j < i ; j++)
{
if ( i % j == 0)
{
is_prime = false;
}
}
if ( is_prime == true)
{
length_prime += 1;
}
}
int[] resolge_prime = new int[length_prime];
int serial = 0;
// 将number前的所有质数归成数组
for ( int i = 2; i <= number ; i++)
{
is_prime = true;
for ( int j = 2; j < i ; j++)
{
if ( i % j == 0)
{
is_prime = false;
}
}
if ( is_prime == true)
{
resolge_prime[serial] = i;
serial += 1;
}
}
// 开始打印分解质因数
System.out.print(number + " = ");
int count;
// 若可以被数组中的质数整除则打印该质数并将数组序号初始化为0
// 否则序号+1尝试是否可以被下一个质数整除
for ( count = 0;number != resolge_prime[count];)
{
if ( number % resolge_prime[count] == 0 )
{
System.out.print(resolge_prime[count]);
number = number / resolge_prime[count];
System.out.print("*");
count = 0;
}
else
{
count += 1;
}
}
if ( number == resolge_prime[count] )
{
System.out.print(resolge_prime[count]);
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scan = new Scanner(System.in);
int Composite = scan.nextInt();
while ( Composite > 100000 || Composite < 2)
{
System.out.print("请输入大于等于2小于等于100000的数字:");
Composite = scan.nextInt();
}
if ( Isprime(Composite) == false )
{
resolve_number(Composite);
}
else
{
System.out.println( Composite + " = " + Composite);
}
scan.close();
}
}
```