散分收集各种语言各种版本的 "打印100以内素数" 程序
我先抛砖引玉了, 一个 Python 的版本, 效率最低的那种:
print [x for x in range(2, 100) if True not in [x % y == 0 for y in range(2, x)] ]
[解决办法]
100以内的太没意思了,1024 bits以上,这个还值得一玩
[解决办法]
你可以试试判断这个几个数是否为素数~~
64167923538537646859730428902332621824680684450335276198844853437211192581741493192824496354392029688858110505951057933521693435675109057185724371955738384042585564928166279957493792697274321778587380781130190508909882379530116194704348642742343892529960367041277051993838196911215612498556072728470612839709
77496647029274319469305393849720372253945267325722789832503217339405524146944760314343653966847675664071682020837100328377375125137078956721642505110710239249991457980460029891302374191088676470266038520066360709193096618027838439963907798908129650493772231765714854054675653200965455562952265068313054426363
31592965210295742976365098353880834195601134241223785754912138330639054249828343032137652595943243180936607258215245778992517330101470431352355507803588766288574356894487817076884964018012957023529688209098047040668956435612699132759789586157128764164454449785773959394658340764111541602068933466520413506311753084727129566285297553587906737504607286502150987016304360892997542516113227846896595073366298537963031966058038270390106776572452494154177171932572203278125408794805582154780087779102570078130847294193602248810563660127104905788195248803763066810079490008199956056251655117474670992375061703762648469997739
[解决办法]
我写个C++版的,速度超快的:
int main()
{
static const int prime[] = {
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
};
static const int count = sizeof(prime) / sizeof(prime[0]);
std::copy( &prime[0], &prime[count], std::ostream_iterator<int>( std::cout, "\t" ) );
return 0;
}
[解决办法]
[co[i]de=c]
#include<iostream>
using namespace std;
int main()
{
int i,j,a[101];
for(i=2;i<101;i++)
a[i]=0;
for(i=2;i<100;i++)
{
if(a[i]==0)
{ j=i;
int k=2;
while(k*j<100)
{
a[k*j]=1;
k++;
}
}
}
for(i=2;i<100;i++)
if(a[i]==0)
cout<<i<<" ";
return 0;
}
[/code]
可以么
[解决办法]
我用的不是模板,而是:
#include <iostream>
#include <vector>
int main (int argc, char** argv)
{
std::vector<int> v(100,1);
for( int i = 2; i < 10; ++ i )
{
if( v[i] )
{
int maxj = 99 / i;
for( int j = i; j <= maxj; ++ j )
{
v[ i * j ] = 0;
}
}
}
std::ofstream file( "print_prime.cpp", std::ios_base::trunc);
file << "#include <iostream>\n";
file << "#include <iterator>\n";
file << "#include <algorithm>\n\n";
file << "int main()\n";
file << "{\n";
file << " static const int prime[] = {";
file << "\n 2";
for( int i = 3; i < 100; ++ i )
{
if( v[i] )
{
file << ", " << i;
}
}
file << "\n };\n";
file << " static const int count = sizeof(prime) / sizeof(prime[0]);\n";
file << " std::copy( &prime[0], &prime[count], std::ostream_iterator<int>( std::cout, \"\\t\" ) );\n";
file << " return 0;\n";
file << "}\n";
return 0;
}
[解决办法]
生成小于n的所有素数,目前已知的确定性算法,最快的也就是 Sieve of Eratosthenes 了
[解决办法]
参考我的博文http://blog.csdn.net/turingo/article/details/8161061
[解决办法]

[解决办法]
#include <stdio.h>
#include <string.h>
#define N 100
int main(){
bool isprime[N + 1];
memset(isprime, true, sizeof(isprime));
for(int i = 2; i * i <= N; ++i){
if(isprime[i]){
for(int j = i * i; j <= N; j += i) isprime[j] = false;
}
}
for(int i = 2; i <= N; ++i) if(isprime[i]) printf("%d ", i);
return 0;
}
[解决办法]
模板生成版本
#include <iostream>
template<size_t N, size_t M = N/2>
struct is_prime
{
static const bool value = N % M ? is_prime<N, M-1>::value : 0;
};
template<size_t N>
struct is_prime<N, 1>
{
static const bool value = 1;
};
template<size_t N>
struct prime_outputer
{
void operator()()
{
prime_outputer<N-1>()();
if (is_prime<N>::value)
std::cout<<N<<' ';
}
};
template<>
struct prime_outputer<1>
{
void operator()()
{}
};
int main()
{
prime_outputer<100>()();
return 0;
}
[解决办法]
批处理版本
@echo off
setlocal enabledelayedexpansion
for /l %%i in (2,1,100) do (
set /a k = %%i / 2
set /a f = 1
for /l %%j in (2,1,!k!) do (
set /a p = %%i %% %%j
if !p! == 0 (set /a f = 0
set /a k = 0)
)
if !f! == 1 (echo %%i)
set /a f = 1
)
[解决办法]
erlang:
-module(prim).
-compile(export_all).
isprime(P,N,B) when (B==true) ->
if
P==N -> B;
P rem N==0 -> false;
true -> isprime(P,N+1,B)
end.
printprime(S,E) when (S>E) -> ok;
printprime(S,E)->
I=isprime(S,2,true),
if
I==true -> io:format("~w~n",[S]),printprime(S+1,E);
I==false -> printprime(S+1,E)
end.
[解决办法]
路过学习, 14楼就是传说中的埃氏筛选算法吧~~
Finding prime numbers - Kenneth Haugland
Different schemas for finding prime numbers explained with code
http://www.codeproject.com/Article.aspx?tag=198374988322054872&
