L1-006 连续因子 - java

题目解析

输出给定数字的连续 最长因子 且 是最小的连续因子

解题思路

直接暴力枚举 他的连续因子 (注: 可能会是一个极大的素数哦!)

代码

import java.io.*;
import java.math.*;
import java.util.*;

public class Main
{

	public static void main(String[] args)
	{
		int n = sc.nextInt();

		int start = 0; // 起始位置
		int maxlen = 0; // 最长长度

//		枚举这个数的因子
		for (int i = 2; i <= n / i; i++) // 防止巨大的素数 卡时间
		{
			int len = 0; // 连续因子的长度
			int mul = 1; // 连续因子的乘积
			for (int j = i;; j++) // 往后枚举
			{
				mul *= j;
				if (n % mul != 0) // 不合法 退出
					break;
				len++;
			}

			if (maxlen < len) // 当前连续因子个数 大于 当前找到的最大连续因子个数 就替换
			{
				maxlen = len;
				start = i;
			}
		}

//		这个数是素数 也就是没在
		if (maxlen == 0)
		{
			out.println(1);
			out.println(n);
		} else
		{
//			输出个数
			out.println(maxlen);

//			输出连续因子
			for (int i = 1; i <= maxlen; i++)
			{
				if (i != 1)
					out.print("*");
				out.print(start + i - 1);
			}
		}

		out.flush();
		out.close();

	}

	static Scanner sc = new Scanner(System.in);
	static PrintWriter out = new PrintWriter(System.out);

}

因子


团体程序设计天梯赛-练习集-java

赞赏