在寻找幸运数字序列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个线程上运行,才能看到执行时间减少。