我使用Eratosthenes和Python 3.1的Sieve编写了一个素数生成器。 代码在ideone.com上以0.32秒正常和正常地运行,以生成高达1,000,000的素数。 # from bitstring import BitString def prime_numbers(limit=1000000): '''Prime number generator. Yields the series 2, 3, 5, 7, 11, 13, 17, 19, 23, 29 … using Sieve of Eratosthenes. ''' yield 2 sub_limit = int(limit**0.5) flags = [False, False] + [True] * (limit – 2) # flags = BitString(limit) # Step through all […]
如何编写一个程序在给定的数字之后findn个素数? 例如100之后的前10个素数,或1000之后的前25个素数。编辑:下面是我试过的。 我得到这样的输出,但我们可以做到这一点,而不使用任何素数testingfunction? #include<stdio.h> #include<conio.h> int isprime(int); main() { int count=0,i; for(i=100;1<2;i++) { if(isprime(i)) { printf("%d\n",i); count++; if(count==5) break; } } getch(); } int isprime(int i) { int c=0,n; for(n=1;n<=i/2;n++) { if(i%n==0) c++; } if(c==1) return 1; else return 0; }
我想find0和一个长variables之间的素数,但我不能得到任何输出。 该计划是 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication16 { class Program { void prime_num(long num) { bool isPrime = true; for (int i = 0; i <= num; i++) { for (int j = 2; j <= num; j++) { if (i != j && i % j == 0) { […]
做一个简单的筛子很容易: for (int i=2; i<=N; i++){ if (sieve[i]==0){ cout << i << " is prime" << endl; for (int j = i; j<=N; j+=i){ sieve[j]=1; } } cout << i << " has " << sieve[i] << " distinct prime factors\n"; } 但是当N很大,我不能在内存中保存这样的数组呢? 我已经查找了分段的sieve方法,它们似乎涉及到sqrt(N)findprimes,但我不明白它是如何工作的。 如果N很大(比如10 ^ 18)呢?