JAVA Thread
一、java thread判断一个数是不是素数、
二、详细说明:
素数判断:用试除法判断一个自然数a是不是质数时,用各个质数从小到大依次去除a,如果到某一个质数正好整除,这个a就可以断定不是质数;如果不能整除,当不完全商又小于这个质数时,就不必再继续试除,可以断定a必然是质数.
三、程序说明:
本程序采用的java thread,创建了两个线程同时对该数是不是素数进行判断,第一个线程用来判断从1到根号(该数)的范围内的奇数能不能整除,如果能的话就是非素数。第二个线程判断从2到根号(该数)的范围内的偶数能不能整除,如果能的话就是非素数,如果不能则是素数。
四、程序代码
- public class WyThread extends Thread {
- private int i;
- private int num;
- private int flag=0;
- public int getI() {
- return i;
- }
- public void setI(int i) {
- this.i = i;
- }
- public int getNum() {
- return num;
- }
- public void setNum(int num) {
- this.num = num;
- }
- public int getFlag() {
- return flag;
- }
- public void setFlag(int flag) {
- this.flag = flag;
- }
- public WyThread(int i,int num)
- {
- this.i=i;
- this.num=num;
- }
- public void run()
- {
- for(;i<num;i+=2)
- {
- if (flag == 0)
- {
- if (num % i == 0 && i != 1)
- flag = 1;
- }
- else
- break;
- }
- }
- public static void main(String[] args) throws InterruptedException
- {
- long c=92331323;
- int m=(int)Math.sqrt(c);
- WyThread wy1=new WyThread(1,m);
- WyThread wy2=new WyThread(2,m);
- long startTime1=System.currentTimeMillis();
- wy1.start();
- wy2.start();
- wy1.join();
- wy2.join();
- long endTime1=System.currentTimeMillis();
- if(wy1.getFlag()==0&&wy2.getFlag()==0)
- System.out.println(c+"是素数");
- else
- System.out.println(c+"不是素数!");
- System.out.println(endTime1-startTime1);
- int flag=0;
- long startTime2=System.currentTimeMillis();
- for(int i=1;i<m;i++)
- {
- if (flag == 0)
- {
- if (c % i == 0 && i != 1)
- flag = 1;
- }
- else
- break;
- }
- if(flag==0)
- System.out.println(c+"是素数");
- else
- System.out.println(c+"不是素数!");
- long endTime2=System.currentTimeMillis();
- System.out.println(endTime2-startTime2);
- System.out.println((endTime2-startTime2)/(endTime1-startTime1));
- }
- }
OpenMp
一、openMp判断一个数是不是素数、
二、详细说明:
素数判断:用试除法判断一个自然数a是不是质数时,用各个质数从小到大依次去除a,如果到某一个质数正好整除,这个a就可以断定不是质数;如果不能整除,当不完全商又小于这个质数时,就不必再继续试除,可以断定a必然是质数.
三、程序说明:
本程序采用的openMp,采用的是parallel for循环的形式进行判断的
四、程序代码
- // OpenMp.cpp : 定义控制台应用程序的入口点。
- //
- #include "stdafx.h"
- #include "omp.h"
- #include <iostream>
- #include <math.h>
- using namespace std;
- int _tmain(int argc, _TCHAR* argv[])
- {
- int m;
- float c;
- cin>>c;
- int flag=0;
- int c2;
- m=(int)sqrt(c);
- #pragma omp parallel
- {
- #pragma omp parallel for
- for(int i=1;i<=m;i+=2)
- {
- if(flag==0)
- {
- if(c2%i==0&&i!=1)
- flag=1;
- }
- else
- continue;
- }
- #pragma omp parallel for
- for(int i=2;i<=m;i+=2)
- {
- if(flag==0)
- {
- if(c2%i==0)
- flag=1;
- }
- else
- continue;
- }
- }
- if(flag==0)
- cout<<c<<"是素数"<<endl;
- else
- cout<<c<<"不是素数"<<endl;
- return 0;
- }
Java Runnable
一、JavaRunnable判断一个数是不是素数、
二、详细说明:
素数判断:用试除法判断一个自然数a是不是质数时,用各个质数从小到大依次去除a,如果到某一个质数正好整除,这个a就可以断定不是质数;如果不能整除,当不完全商又小于这个质数时,就不必再继续试除,可以断定a必然是质数.
三、程序说明:
本程序采用的javaRunnable,创建了两个线程同时对该数是不是素数进行判断,第一个线程用来判断从1到根号(该数)的范围内的奇数能不能整除,如果能的话就是非素数。第二个线程判断从2到根号(该数)的范围内的偶数能不能整除,如果能的话就是非素数,如果不能则是素数。
四、程序代码
- public class RunnableSuShu implements Runnable
- {
- private int i;
- private int num;
- private int flag=0;
- public int getFlag() {
- return flag;
- }
- public RunnableSuShu(int i,int num)
- {
- this.i=i;
- this.num=num;
- }
- @Override
- public void run() {
- // TODO Auto-generated method stub
- for(;i<num;i+=2)
- {
- if (flag == 0)
- {
- if (num % i == 0 && i != 1)
- flag = 1;
- }
- else
- break;
- }
- }
- }
- public class ThreadWy {
- public static void main(String[] args) {
- long c=92331323;
- int m=(int)Math.sqrt(c);
- RunnableSuShu wy1=new RunnableSuShu(1, m);
- RunnableSuShu wy2=new RunnableSuShu(2, m);
- long startTime1=System.currentTimeMillis();
- wy1.run();
- wy2.run();
- long endTime1=System.currentTimeMillis();
- if(wy1.getFlag()==0&&wy2.getFlag()==0)
- System.out.println(c+"是素数");
- else
- System.out.println(c+"不是素数!");
- System.out.println(endTime1-startTime1);
- int flag=0;
- long startTime2=System.currentTimeMillis();
- for(int i=1;i<m;i++)
- {
- if (flag == 0)
- {
- if (c % i == 0 && i != 1)
- flag = 1;
- }
- else
- break;
- }
- if(flag==0)
- System.out.println(c+"是素数");
- else
- System.out.println(c+"不是素数!");
- long endTime2=System.currentTimeMillis();
- System.out.println(endTime2-startTime2);
- System.out.println((endTime2-startTime2)/(endTime1-startTime1));
- }
- }
Win32
一、Win32API判断一个数是不是素数、
二、详细说明:
素数判断:用试除法判断一个自然数a是不是质数时,用各个质数从小到大依次去除a,如果到某一个质数正好整除,这个a就可以断定不是质数;如果不能整除,当不完全商又小于这个质数时,就不必再继续试除,可以断定a必然是质数.
三、程序说明:
本程序采用的Win32API,创建了两个线程同时对该数是不是素数进行判断,第一个线程用来判断从1到根号(该数)的范围内的奇数能不能整除,如果能的话就是非素数。第二个线程判断从2到根号(该数)的范围内的偶数能不能整除,如果能的话就是非素数,如果不能则是素数。
四、程序代码
- #include "stdafx.h"
- #include <windows.h>
- #include <process.h>
- #include <math.h>
- #include <iostream>
- #include <fstream>
- using namespace std;
- int m;
- float c;
- int flag=0;
- int c2;
- HANDLE Thread1,Thread2;
- void StartThread1(LPVOID param)
- {
- for(int i=1;i<=m;i+=2)
- {
- if(flag==0)
- {
- if(c2%i==0&&i!=1)
- flag=1;
- }
- else
- break;
- }
- }
- void StartThread2(LPVOID param)
- {
- for(int j=2;j<=m;j+=2)
- {
- if(flag==0)
- {
- if(c2%j==0)
- flag=1;
- }
- else
- break;
- }
- }
- int _tmain(int argc, _TCHAR* argv[])
- {
- cin>>c;
- m=sqrt(c);
- c2=(int)c;
- Thread1=CreateEvent(NULL,FALSE,FALSE,NULL);
- //cout<<"1"<<endl;
- Thread2=CreateEvent(NULL,FALSE,FALSE,NULL);
- //cout<<"2"<<endl;
- _beginthread(StartThread1,0,NULL);
- //cout<<"3"<<endl;
- _beginthread(StartThread2,0,NULL);
- //cout<<"4"<<endl;
- //WaitForSingleObject(Thread2,INFINITE);
- cout<<"5"<<endl;
- if(flag==0)
- cout<<"是素数"<<endl;
- else
- cout<<"不是素数"<<endl;
- cin>>c;//保留输出框
- return 0;
- }
.NET
一、.NET判断一个数是不是素数、
二、详细说明:
素数判断:用试除法判断一个自然数a是不是质数时,用各个质数从小到大依次去除a,如果到某一个质数正好整除,这个a就可以断定不是质数;如果不能整除,当不完全商又小于这个质数时,就不必再继续试除,可以断定a必然是质数.
三、程序说明:
本程序采用的.NET,创建了两个线程同时对该数是不是素数进行判断,第一个线程用来判断从1到根号(该数)的范围内的奇数能不能整除,如果能的话就是非素数。第二个线程判断从2到根号(该数)的范围内的偶数能不能整除,如果能的话就是非素数,如果不能则是素数。
四、程序代码
- /*
- .NET并行判断一个数是不是素数
- */
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading;
- namespace DotNetWyYt
- {
- class Program
- {
- public static int m;
- public static int c;
- public static int flag = 0;
- public static int c2;
- public static void WithDraw1()
- {
- for (int i = 1; i <= m; i += 2)
- {
- if (flag == 0)
- {
- if (c2 % i == 0 && i != 1)
- flag = 1;
- }
- else
- break;
- }
- }
- public static void WithDraw2()
- {
- for (int j = 2; j <= m; j += 2)
- {
- if (flag == 0)
- {
- if (c2 % j == 0)
- flag = 1;
- }
- else
- break;
- }
- }
- static void Main(string[] args)
- {
- c = 12323;
- m = (Int32)Math.Sqrt((double)c);
- c2 = (int)c;
- DateTime d1 = new DateTime();
- ThreadStart thread1 = new ThreadStart(WithDraw1);
- Thread newThread1 = new Thread(thread1);
- ThreadStart thread2 = new ThreadStart(WithDraw2);
- Thread newThread2 = new Thread(thread2);
- newThread1.Start();
- newThread2.Start();
- DateTime d2 = new DateTime();
- Console.WriteLine(d2-d1);
- if (flag == 0)
- Console.WriteLine(c+"是素数");
- else
- Console.WriteLine(c+"23不是素数");
- Console.Read();
- }
- }
- }