Java tutorial
//package com.java2s; /* * This code was written by Bear Giles <bgiles@coyotesong.com> and he * licenses this file to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance with the * License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Any contributions made by others are licensed to this project under * one or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * * Copyright (c) 2014 Bear Giles <bgiles@coyotesong.com> */ import java.util.Arrays; import java.util.List; public class Main { private static int[] greatestFactor; private static final List<Integer> seeds = Arrays.asList(2, 3, 5, 7, 11, 13, 17, 19); private static void initialize(int size) { greatestFactor = new int[size]; // wheel factorization (sort of...) greatestFactor[1] = 1; for (Integer seed : seeds) { for (int i = seed; i < size; i += seed) { greatestFactor[i] = seed; } } // now do modified Sieve of Er... int sqrt = (int) Math.floor(Math.sqrt(size) + 1); for (int prime = 2; prime < sqrt; prime++) { if (0 == greatestFactor[prime]) { for (int i = prime; i < size; i += prime) { greatestFactor[i] = prime; } } } // now flesh out the rest of the sieve. for (int i = sqrt; i < size; i++) { if (0 == greatestFactor[i]) { greatestFactor[i] = i; } } } }