平行幸运数字系列

时间:2019-04-20 10:48:04

标签: java multithreading threadpool

在寻找幸运数字序列https://en.wikipedia.org/wiki/Lucky_number的过程中,我需要协助以下并行问题的并行处理。任何人都可以通过可变数量的线程(从1到8)来帮助我解决此问题。非常感谢。

import java.util.Scanner;

public class Main {

public static void isLucky(int n) {
    int numlf=n;
    int mvdelloc=2;
    int arr[]=new int[n+1];

    // Insert value to the array
    for(int i=1;i<=n;++i)
    {
        arr[i]=i;
    }

    //lucky series logic
    int delloc=2;
    while (delloc<=numlf )
    {
        //Delete array
        int temp=delloc;
        while(delloc<=n)
        {
            if(arr[delloc]!=0)
            {
                arr[delloc]=0;
                numlf--;
            }
            delloc+=temp;
        }
        // Arrange Array
        for(int j=1;j<=n-numlf;++j)
        {
            for(int k=1;k<=n;++k)
            {
                if(arr[k]==0 && k+1<=n)
                {
                    arr[k]=arr[k+1];
                    arr[k+1]=0;
                }
            }
        }
//             Display Arrange array
        System.out.println("Display arranged array");
        for(int k=1;k<=numlf;++k)
        {
            System.out.print(arr[k]+" ");
        }
        delloc=arr[mvdelloc];
        ++mvdelloc;
        System.out.println();
    }

    //Display final result
    System.out.println();
    System.out.print("your luck NUM : ");
    for(int i=1;i<=numlf;++i)
    {
        System.out.print(arr[i]+" ");
    }
}
public static void main(String[] args) {
    long startTime = System.nanoTime();
//      for: 25640 program takes 5 minutes to execute
    isLucky(25640);
    long endTime = System.nanoTime();
    long timeElapsed = endTime - startTime;
    System.out.println("\nExecution time in minutes : " +(float) timeElapsed / 1000000 / 1000 /60 );
}

}

我必须在1、2、3、4、5、6、7、8个线程上运行,才能看到执行时间减少。

0 个答案:

没有答案