1285: Factors

参考

  hadis_fukan的博客——wustoj 1285 Factors

题目

  输入一个数n,找出1~n之间(包括1,n)的质因子最多的数(x)的质因子个数(f[x])。更多内容点击标题。

分析

  很明显,这题的结果是可以直接算出来的,保存到数组中。通过题目,就可以了解到,我们需要算出2-2000000之间所有的数的质因子的个数。这样才能找出1~n之间质因子最多的数x。这里你可能想是不是需要先将质数单独求出来。那是完全没必要的。我们只需要在求因子的过程中,顺带着区分出质数即可。并且合理利用已经计算出的质数。

测试数据

 输入

2
3
4
5
6
7
8
9

 输出

1
1
2
2
2
2
3
3

代码

/**
* time 1148ms
* @author PengHao
* @version 1.0
* @date 2019-05-03 上午9:34:02
* Environment: Windows 10
* IDE Version: Eclipse 2019-3
* JDK Version: JDK1.8.0_112
*/ import java.io.BufferedInputStream;
import java.util.ArrayList;
import java.util.Scanner; public class Main {
private Scanner sc;
/**
* @Field <code>MAXN</code> N的最大值
*/
private static final int MAXN = 2000000;
/**
* @Field <code>prime</code> 保存素数
*/
private ArrayList<Integer> prime;
/**
* @Field <code>f</code> x的质因子的个数为f[x]
*/
private byte[] f;
/**
* @Field <code>maxF</code> 1-n之间质因子最多的数的质因子个数
*/
private byte[] maxF; public Main() {
sc = new Scanner(new BufferedInputStream(System.in));
initF(); // 初始化f
initMaxF(); // 初始化maxF
int n;
while (sc.hasNext()) {
n = sc.nextInt();
System.out.println(maxF[n]);
}
sc.close();
} /**
* Initialize the array f.
*/
private void initF() {
prime = new ArrayList<Integer>(); // 保存素数
f = new byte[MAXN + 1]; // 记录质因子个数
boolean iPrime; // true 质数,false 非质数
for (int i = 2; i <= MAXN; i++) {
iPrime = true; // 默认i是质数
for (int j : prime) { // 取出一个质数j
// 如果j的平方大于i,那么j肯定不是i的因子
// 因此i就是质数
if (j * j > i) {
break;
}
if (0 == i % j) { // 如果j是i的因子
iPrime = false; // 那么i是不是质数
// i的质因子个数等于另一个因子的质因子个数加1
f[i] = (byte) (f[i / j] + 1);
break;
}
}
if (iPrime) { // 如果i是质数
prime.add(i); // 将i加到质数数组列表中
f[i] = 1; // 并且质数i的质因子个数为1
}
}
} /**
* Initialize the array maxF.
*/
private void initMaxF() {
maxF = new byte[MAXN + 1];
byte max = 0; // 记录质因子个数的最大值
for (int i = 2; i <= MAXN; i++) {
if (f[i] > max) { // 当前数i的质因子个数比max大
max = f[i]; // 更新最大值
}
maxF[i] = max; // 将最大值保存到数组中
}
} public static void main(String[] args) {
new Main();
}
}

写在最后:

  1. 如需转载,请于首页注明链接形式的wowpH的博客——WUSTOJ 1285: Factors(Java)
  2. 代码原创,如需公开引用,不能删除首行注释(作者,版本号,时间等信息)。
  3. 如果有疑问欢迎评论留言,尽量解答。

WUSTOJ 1285: Factors(Java)的更多相关文章

  1. WUSTOJ 1319: 球(Java)并查集

    题目链接:1319: 球 参考:wustoj 1319 球-wust_tanyao,并查集 并查集系列:WUSTOJ 1346: DARK SOULS(Java)并查集 Description Icy ...

  2. WUSTOJ 1283: Hamster(Java)

    1283: Hamster 参考博客 wust_tanyao的博客 题目   第0个月有1对仓鼠.仓鼠的寿命是M个月,仓鼠成年后每个月生一对仓鼠(一雌一雄),问N个月后有仓鼠多少对.更多内容点此链接 ...

  3. WUSTOJ 1326: Graph(Java)费马数

    题目链接:1326: Graph 参考博客:HNUSTOJ-1617 Graph(费马数)--G2MI Description Your task is to judge whether a regu ...

  4. WUSTOJ 1332: Prime Factors(Java)

    题目链接:1332: Prime Factors Description I'll give you a number , please tell me how many different prim ...

  5. WUSTOJ 1349: TLE(Java)算法优化

    题目链接:1349: TLE Description WH在刷题时,设计出了如下代码: #include<stdio.h> int main() { int i, j, cnt, k, N ...

  6. WUSTOJ 1282: Start(Java)

    1282: Start 题目   判断一个字符串是不是回文串.例如:"abcba"是回文串.更多内容点击标题. 分析   水题,自己思考. 代码 /** * time 838ms ...

  7. WUSTOJ 1347: GCD(Java)互质

    题目链接:1347: GCD Description 已知gcd(a,b)表示a,b的最大公约数. 现在给你一个整数n,你的任务是在区间[1,n)里面找到一个最大的x,使得gcd(x,n)等于1. I ...

  8. WUSTOJ 1325: Distance(Java)坐标计算

    题目链接:1325: Distance Description There is a battle field. It is a square with the side length 100 mil ...

  9. WUSTOJ 1313: 数列(Java)进制转换

    题目链接:

随机推荐

  1. Java Heap dump文件分析工具jhat简介

    jhat 是Java堆分析工具(Java heap Analyzes Tool). 在JDK6u7之后成为标配. 使用该命令需要有一定的Java开发经验,官方不对此工具提供技术支持和客户服务. 用法: ...

  2. js 根据滚动条加载数据

    很久没记笔记了,最近搞起web开发了 <html> <head> <script src="http://code.jquery.com/jquery-1.7. ...

  3. linux下如何删除乱码文件

    首先执行ls -i命令,此时在文件前面会出现一个数字,这个数字是文件的节点号 接着,执行命令 find -inum 节点号 -delete 即可将乱码文件成功删除

  4. [RK3399] 修改移动网络默认为4G

    CPU:RK3399 系统:Android 7.1 现在手机卡都默认是 4G 网路,但是源码中默认的还是 3G网络,每次都要手动改到 4G. 下面在源码中就直接将默认网络改为4G. PREFERRED ...

  5. python 将数据写入excel

    摘要链接: python第三方库——xlrd和xlwt操作Excel文件学习 :http://blog.csdn.net/wangkai_123456/article/details/50457284 ...

  6. Python-文件读写及修改

    文件的读写有三种形式:读.写和追加. 一.读模式 r 和读写模式 r+ 1.读模式 r 读模式r特点:(1)只能读,不能写:(2)文件不存在时会报错. (1)例:读取当前目录下的books.txt文件 ...

  7. linux内核中的__cpu_suspend是在哪里实现的呀?

    1. 内核版本 4.19 2. 在arch/arm/kernel/sleep.S中实现如下: /* * Save CPU state for a suspend. This saves the CPU ...

  8. [webpack]webpack打包优化

    1.import优化 a.tree-shaking 把没用到的代码删除掉,import 在生产环境下 会自动去除掉没用的代码 b.scope hosting 作用域提升,在webpack中会自动省略一 ...

  9. setShadpwLayer实现阴影效果

    package com.loaderman.customviewdemo; import android.content.Context; import android.graphics.*; imp ...

  10. java如何压缩多个文件到压缩包,并下载到浏览器?

    java压缩多个文件到压缩包,并下载到浏览器   解决方法: 完整的方法如下,很简单,亲试有效,极力推荐. 我是以流作为文件,而不是file,循环把所有pdf文件压缩到pdf.zip压缩包中. 1.前 ...