2的29次方范围内的素数

今天隔壁室友让我帮他写一个晒素数的程序

我就写了一个  发现再int范围内的素数筛不出来,,,,

电脑只能跑到 2的29;

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <map>
#include <iostream>
#include <time.h>
using namespace std;
typedef long long ll;
bool is_prime[1<<30];
int  prime[1<<28];
int cnt;
void cost_time()
{
    cout<<"调用该程序所花费的时间为:"<<clock()/CLOCKS_PER_SEC<<"秒\n";
    cout<<"调用该程序所花费的时间为:"<<clock()<<"毫秒\n";
}
void init(){
	cnt = 0;
	for(int  i=0;i<(1<<29);i++)
	is_prime[i]=1;
		is_prime[0]=is_prime[1]=0;
		for(int  i=2;i<(1<<29);i++){
			if(is_prime[i])
			{
				prime[cnt++]=i;
				for(int  j=i*2;j<(1<<29);j+=i)
					is_prime[j]=0;
			}
		}
}
int main(){
	freopen("prime.txt","w",stdout);
	init();
	printf("%d\n",cnt);
	for(int i=0;i<cnt;i++)
		{
			printf("%d ",prime[i]);
			if(i%6==0)
			printf("\n");
		}
		cost_time();
}
时间: 2024-10-17 11:30:12

2的29次方范围内的素数的相关文章

「C语言」「算法」输出指定范围内的素数

#include <stdio.h> //输出指定范围内的素数 int main(){ int a,b; int i,j; printf("请输入整数范围并用空格隔开:\n"); scanf("%d%d",&a,&b); for(i=a;i<=b;i++){ for(j=2;j<=i-1;j++) { if(i%j==0) break; } if(j>=i-1) printf("%d ",i); }

求1-100内的素数(包括100)

public class PrimeNumber { // 求1-100内的素数(包括100) public static void main(String[] args) { int j = 0; System.out.println("输出1-100之间的素数"); for (int i = 2; i <= 100; i++) {// 1既不是苏数,也不是合数 if (i < 4) { System.out.println(i); continue;//注意此处有con

java学习日记-基础-列出2~100内的素数

素数的概念:一个整数如果只能整除1和它本身,那么这个整数就是一个素数 方法一:素数是除去能被2整除.3整除.5整除.7整除的整数,但包含2,3,5,7 public class Sushu { public static void main(String[]args){ String str="2 3 5 7 "; for(int i=2;i<=100;i++){ if(i%2==0||i%3==0||i%5==0||i%7==0 ){ //:逻辑判断,筛选 continue;

javascript 显示一定范围内的素数(质数)

素数又称质数,是大于1的自然数,并且只有1和它本身两个因数. 具体实现代码如下: 运行代码 <!DOCTYPE HTML> <html> <head lang="en"> <meta charset="UTF-8"> <script type="text/javascript" src="http://files.cnblogs.com/greenteaone/jquery-2.1.

poj 2689 Prime Distance(筛一个区间内的素数(或合数))

: [题意说明] 给你指定的范围[L, U],在这个范围内找出相邻最近和最远的两组质数,若最近或最远值相同,输出较小的那组.其中:1≤L,另U-L≤1000000. [问题分析] 此题与质数有关,显然若是能求出[L, U]之间的质数,然后从前往后扫描一遍即可出需要的结果,但问题是L与U的范围太大,是不可能在规定的时间内实现的. 但这里给我们提供了另一个条件:U-L≤1000000,如果我们只求1000000以内的素数,完全可以在规定的时间实现的!但由于所求的不是1-1000000以内的素数,所以

求指定整数范围内的素数之和

//求指定整数范围内的素数之和int getSumResult(int start,int end){ int i,j; int flag=0; int result=0; if(start<0||end <0) { lr_output_message("开始值.结束值需要为正整数"); exit(-1); } else if(start>=end) { lr_output_message("开始值需要<结束值"); exit(-1); }

java和c++语言编程的异同之输出制定范围内的素数

解析:素数是指除1自身以外,不能被其他数整除的自然数.显然最小的素数是2,其余偶数均不是素数.对于一个奇数看k,需要使用3~k-1之间的每个奇数进行测试,一旦找到一个奇数j能被k整除,则k不是素数:只有测试完指定范围中的所有奇数,他们都不能被k整除时,才能确定k是素数.实际上,测试范围可以缩小为3~sqrt(k).例如,判断97是否是素数,测试范围是3~9.84之间的所有奇数3.5.7.9. java代码如下: package test; import java.text.SimpleDateF

用筛法求之N内的素数。

题目描述 输入 N 输出 0-N的素数 样例输入 100 样例输出 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 代码:#include<stdio.h>#include<math.h>int main(){    int a[200],n,i,j,k;      scanf("%d",&n);    for(i=1;i<n+1;i++)       a

输出10000内所有素数

不用函数方法: 1 #include <stdio.h> 2 /* 当函数返回值为1的时候是素数 3 当函数返回值为0的时候不是素数*/ 4 int panduan(int n) 5 { 6 int i=2,j=1; 7 while(i<=n/2) 8 { 9 if(n%i==0) 10 j=0; 11 i++; 12 } 13 return j; 14 } 15 16 17 18 int main() 19 { 20 int i=2; 21 int k=0; 22 while(i<