I was given a homework assignment in Java to create classes that find Prime number and etc (you will see in code better).
class Primes {
public static boolean IsPrime(long num) {
if (num%2==0){
return false;
}
for (int i=3; i*i<=num;i+=2) {
if (num%i==0) {
return false;
}
}
return true;
} // End boolen IsPrime
public static int[] primes(int min, int max){
int counter=0;
int arcount=0;
for (int i=min;i<max;i++){
if (IsPrime(i)){
counter++;
}
}
int [] arr= new int[counter];
for (int i=min;i<max;i++){
if (IsPrime(i)){
arr[arcount]=i;
arcount++;
}
}
return arr;
} // End Primes
public static String tostring (int [] arr){
String ans="";
for (int i=0; i<arr.length;i++){
ans= ans+arr[i]+ " ";
}
return ans;
}
public static int closestPrime(long num){
long e = 0 , d = 0 , f = num;
for (int i = 2; i <= num + 1 ; i++){
if ((num + 1) % i == 0){
if ((num + 1) % i == 0 && (num + 1) == i){
d = num + 1;
break;
}
num++;
i = 1;
}
}
num = f;
for (int i = 2; i < num; i++){
if ((num - 1) % i == 0){
if ((num - 1) % i == 0 && (num - 1) == i){
e = num - 1;
break;
}
num--;
i = 1;
}
}
num = f;
if (d - num < num - e) System.out.println("Closest Prime: "+d);
else System.out.println("Closest Prime: "+e);
return (int) num;
} // End closestPrime
}//end class
The goal of my code is to be faster (and correct). I'm having difficulties achieving this. Suggestions?
class Primes {
public static boolean IsPrime(int num) {
if (num==1){
return false;
}
for (int i=2; i<Math.sqrt(num);i++) {
if (num%i==0) {
return false;
}
}
return true;
}
// End boolen IsPrime
public static int[] primes(int min, int max){
int size=0;
int [] arrtemp= new int[max-min];
for (int i=min;i<max;i++){
if (IsPrime(i)){
arrtemp[size]=i;
size++;
}
}
int [] arr= new int[size];
for (int i=0;i<size;i++){
arr[i]=arrtemp[i];
}
return arr;
}
public static String tostring (int [] arr){
String ans="";
for (int i=0; i<arr.length;i++){
ans= ans+arr[i]+ " ";
}
return ans;
}
public static int closestPrime(int num) {
int count=1;
for (int i=num;;i++){
int plus=num+count, minus=num-count;
if (IsPrime(minus)){
return minus;
}
if (IsPrime(plus)) {
return plus;
}
count=count+1;
}
} // End closestPrime
}//end class
I think you can improve this code a bit:
Test Code:
/**
Ex2: Overall time: 2545 m-sec
*/
public class PrimesTester {
public static void main(String[] args){
long t1 = new Date().getTime(); // primes
testPrime(100000);
testPrime(1000000);
testPrime(10000000);
testPrime(100000000);
long t2 = new Date().getTime();
System.out.println("Ex2: Overall time: "+(t2-t1)+" m-sec");
}
public static void testPrime(int num) {
System.out.println();
System.out.println("***** Testing class Primes for: "+num+"*****");
int min= num, max = min+min/2;
long t1 = new Date().getTime(); // primes
int[] primes = Primes.primes(min,max);
long t2 = new Date().getTime();
long p10_6 = Primes.closestPrime(min);
long t3 = new Date().getTime();
System.out.println("Ex2: prime test, time: "+(t2-t1)+" m-sec , number of primes: "+primes.length);
System.out.println("Ex2: closestPrime test, time: "+(t3-t2)+" m-sec , prime: "+p10_6);
}
}