Main.java Source code

Java tutorial

Introduction

Here is the source code for Main.java

Source

//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;
            }
        }
    }
}