求2000以内的素数

方法一:因此判断一个整数m是否是素数,只需把m被 2 ~ m-1 之间的每一个整数去除,如果都不能被整除,那么m就是一个素数。

方法二:另外判断方法还可以简化。m不必被 2 ~ m-1 之间的每一个整数去除,只需被 2 ~  之间的每一个整数去除就可以了。如果m不能被 2 ~ 间任一整数整除,m必定是素数。例如判别17是是否为素数,只需使17被2~4之间的每一个整数去除,由于都不能整除,可以判定17是素数。

原因:因为如果m能被 2 ~ m-1 之间任一整数整除,其二个因子必定有一个小于或等于,另一个大于或等于。例如16能被2,4,8整除,16=2*8,2小于4,8大于4,16=4*4,4=√16,因此只需判定在2~4之间有无因子即可。

//方法一:
# include <iostream>
using namespace std;
bool Judge(int data)
{
	if (data <= 0)
	{
		cout << "error!";
	}
	if (data == 1)
	{
		return false;
	}
	int i = 2;
	for (i = 2; i < data - 1; i++)
	{
		if (data%i == 0)
		{
			break;
		}
	}
	if (i >= data)
	{
		return false;
	}
	else
	{
		return true;
	}
}
//求2000以内的所有素数
int main()
{
	int count = 0;
	for (int i = 1; i < 2000; i++)
	{
		if (Judge(i))
		{
			count++;
			cout << i << " ";
			if(count%10 == 0&&count>10)
			{
				cout << endl;
			}

		}
	}
	return 0;

}
//方法二,其实就是方法一的优化
bool Judge2(int data)
{
	int SqurtData = (int)sqrt((double)data);
	if (data <= 0)
	{
		cout << "error!";
	}
	if (data == 1)
	{
		return false;
	}
	int i = 2;
	for (i = 2; i <= SqurtData; i++)
	{
		if (data%i == 0)
		{
			break;
		}
	}
	if (i >= data)
	{
		return false;
	}
	else
	{
		return true;
	}

}
时间: 2024-10-03 02:19:27

求2000以内的素数的相关文章

一道面试题:用多线程求1000以内的素数有多少个?并给出消耗时间

我曾经去一个公司面试,遇到这么一个题目:求1000以内的素数有多少个?用多线程实现,并给出消耗时间.我想了半天,没有想出多线程的解决方案.今天因为机缘到了,我浅谈下我的解法. 这道题,显然得考虑两个问题: 1.多线程的问题 2.算法性能问题 有人觉得1000以内还考虑什么算法性能?这肯定很快.但是话说回来,这个都有必要用多线程吗?如果我们求10000000以内的素数有多少个?是不是必须考虑以上两个问题了?多线程和算法优化的目的都是为了提高程序执行的效率.我们首先来考虑算法问题,什么是素数?素数:

用筛选法求100以内的素数(数组)

用筛选法求100以内的素数,要求使用数组. #include "stdafx.h" #include<iostream> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { int a[100],i,b[100],j,n=0;     //数组a[100]来放用于判断的数,数组b[100]来放素数 for(i=0;i<100;i++)       //注意这里i不能从1开始,因为数组a的首位是a[0]

求n以内的素数

质数(prime number)又称素数,有无限个.除了1和它本身以外不再有其他的除数整除. 1 void printPrime(int n) 2 { 3 int num=2; 4 while(num<=n) 5 { 6 int i=2; 7 while(i<=num/2){ 8 if(num%i==0){ 9 break; 10 } 11 i++; 12 } 13 if(i>num/2){ 14 printf("%d\t",num); 15 } 16 num++;

python求100以内的素数

for i in range(2,101): j = 2 while j < i: if i % j == 0: break j += 1 # i % j == 0不成立,j = j+1,然后在比较j < i else: print('素数有:%d' % i) 原文地址:https://www.cnblogs.com/laosun0204/p/8676383.html

python求1000以内的素数

import timedef isPrime(n): for i in range(2,int(n**0.5)+1): if n % i==0: return False else: return True strPrimes=""t=time.clock()for j in range(2,1000): if isPrime(j): strPrimes=strPrimes+str(j)+"," print(strPrimes)print("Time us

求10000以内的素数

#include "iostream" #include "cmath" #include "memory.h" using namespace std; const int Max = 10000; bool numbers[Max]; void searchprime(){ memset(numbers, true, sizeof(numbers)); for (int i = 2; i < sqrt(Max) + 1; i++){ i

Python3练习题 026:求100以内的素数

p = [i for i in range(2,100)] #建立2-99的列表 for i in range(3,100): #1和2都不用判断,从3开始     for j in range(2, i):         if i%j == 0:             p.remove(i)             break print(p) 原文地址:https://www.cnblogs.com/jackzz/p/9125546.html

Python实现求1-1000以内的素数

def func(): for i in range(2,1000): # count表示被整除的次数 count = 0 for j in range(1,i+1): if i%j==0: count+=1 # count==2说明,该数字只能被1和它本身整除 if count==2: if i==j: print(i) func() 原文地址:https://www.cnblogs.com/lxmtx/p/11840130.html

埃氏筛法(求n以内有多少个素数)

题目大意:给定整数n,请问n以内有多少个素数 思路:想必要判断一个数是否是素数,大家都会了,并且可以在O(根号n)的复杂度求出答案,那么求n以内的素数呢,那样求就显得有点复杂了,下面看一下这里介绍的??氏算法 其实呢,就是求出第一个素数,然后把n以内它的倍数都删掉就行了,很简单.然后找下一个素数,同样方法····· 看代码 #include<iostream> #include<string.h> #include<map> #include<cstdio>