WUSTOJ 1285: Factors(Java)
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();
}
}
写在最后:
- 如需转载,请于首页注明链接形式的wowpH的博客——WUSTOJ 1285: Factors(Java);
- 代码原创,如需公开引用,不能删除首行注释(作者,版本号,时间等信息)。
- 如果有疑问欢迎评论留言,尽量解答。
WUSTOJ 1285: Factors(Java)的更多相关文章
- WUSTOJ 1319: 球(Java)并查集
题目链接:1319: 球 参考:wustoj 1319 球-wust_tanyao,并查集 并查集系列:WUSTOJ 1346: DARK SOULS(Java)并查集 Description Icy ...
- WUSTOJ 1283: Hamster(Java)
1283: Hamster 参考博客 wust_tanyao的博客 题目 第0个月有1对仓鼠.仓鼠的寿命是M个月,仓鼠成年后每个月生一对仓鼠(一雌一雄),问N个月后有仓鼠多少对.更多内容点此链接 ...
- WUSTOJ 1326: Graph(Java)费马数
题目链接:1326: Graph 参考博客:HNUSTOJ-1617 Graph(费马数)--G2MI Description Your task is to judge whether a regu ...
- WUSTOJ 1332: Prime Factors(Java)
题目链接:1332: Prime Factors Description I'll give you a number , please tell me how many different prim ...
- WUSTOJ 1349: TLE(Java)算法优化
题目链接:1349: TLE Description WH在刷题时,设计出了如下代码: #include<stdio.h> int main() { int i, j, cnt, k, N ...
- WUSTOJ 1282: Start(Java)
1282: Start 题目 判断一个字符串是不是回文串.例如:"abcba"是回文串.更多内容点击标题. 分析 水题,自己思考. 代码 /** * time 838ms ...
- WUSTOJ 1347: GCD(Java)互质
题目链接:1347: GCD Description 已知gcd(a,b)表示a,b的最大公约数. 现在给你一个整数n,你的任务是在区间[1,n)里面找到一个最大的x,使得gcd(x,n)等于1. I ...
- WUSTOJ 1325: Distance(Java)坐标计算
题目链接:1325: Distance Description There is a battle field. It is a square with the side length 100 mil ...
- WUSTOJ 1313: 数列(Java)进制转换
题目链接:
随机推荐
- 面试题小议---BY gremount
Problem 1: 两个烧杯,一个放糖一个放盐,用勺子舀一勺糖到盐,搅拌均匀,然后舀一勺混合物会放糖的烧杯,问你两个烧杯哪个杂质多? 提示:相同.(1)可以用一个特殊数据计算一下,可以得到两个烧杯 ...
- 面试题集锦---BY算法导论小组
3.7题 3.21题 1.给定能随机生成整数 1 到 5 的函数,写出能随机生成整数 1 到 7 的函数. 提示:两个random就可以有25种可能,每种可能都是等概率的 2.判断一个自然数是否是某个 ...
- vue项目构建:vue-cli+webpack常用配置
1,Webpack-dev-server的proxy用法:https://www.jianshu.com/p/f489e7764cb8 2,vue-cli3搭建项目之webpack配置:https:/ ...
- linux几种传输方式与拷贝方式的性能分析
本文记录linux系统中文件传输的多种方式,留作备忘.linux中文件传输的方式有ftp,scp,rsync,rz,sz等,但各个工具的功能又有所区别: FTP : FTP是文件服务器,可实现文件的上 ...
- angular绑定数据
Angular 中使用{{}}绑定业务逻辑里面定义的数据 <h1> Welcome to {{ title }}! /*引入title*/ </h1> export class ...
- python小白之np功能快速查
np一些用法 np.a np.array([1,2,3],dtype=int) #建立一个一维数组, np.array([[1,2,3],[2,3,4]]) #建立一个二维数组. np.arang ...
- 阶段5 3.微服务项目【学成在线】_day16 Spring Security Oauth2_10-SpringSecurityOauth2研究-校验令牌&刷新令牌
3.5校验令牌 Spring Security Oauth2提供校验令牌的端点,如下: Get: http://localhost:40400/auth/oauth/check_token?token ...
- Qt编写自定义控件43-自绘电池
一.前言 到了9102年了,现在智能手机不要太流行,满大街都是,甚至连爷爷奶奶级别的人都会用智能手机,本次要写的控件就是智能手机中的电池电量表示控件,采用纯painter绘制,其实也可以采用贴图,我估 ...
- 源码搭建LAMP环境
需要准备的安装包以及下载地址(只是一个大概地址,版本和下载方式需要自行选择): Apache http://httpd.apache.org/ httpd主程序包(http server) MySQ ...
- Delphi分割字符串函数Split源码
function TStringHelper.Split(const Separator: array of string; Count: Integer; Options: TStringSplit ...