/*生成素数*/
#include <stdio.h>
#define N 10000
int main()
{
int p, d;
int is_prime;
for (p = 2; p <= N; p++)
{
is_prime = 1;
for (d = 2; d < p; d++)
if (p % d == 0)
is_prime = 0;
if (is_prime != 0)
printf("%d ", p);
}
printf("/n");
system("pause");
return 0;
}
/*埃拉托色尼筛网法(Sieve of Erastosthenes)(如果一个数不能被任何素数整除,那么这个数就是一个素数)
1,如果i为素数,则设置a[i]为1;否这设置为0;
2,如果将所有较小素数的倍数都设置为0之后,a[i]仍然保持为1,则可判定它是素数
*/
#include <stdio.h>
#define N 10000
int main()
{
int i, j, a[N];
for (i = 2; i < N; i++)
a[i] = 1;
for (i = 2; i < N; i++)
if (a[i])
for (j = i ; j <= N/i; j++)
a[i*j] = 0;
for (i = 2; i < N; i++)
if (a[i])
printf("%4d ", i);
printf("/n");
system("pause");
return 0;
}
/*(如果一个数不能被任何素数整除,那么这个数就是一个素数)
进一步优化程序的效率,可以再使用列外一个定理:任何一个非素数的整数,肯定会有
一个小于其平方根的素数因数 ,即是,在判断某个数是否为素数时,我们只需要尝试那
些小鱼其平方根的素数就可以了
*/
#include <stdio.h>
#include <stdbool.h>
#define N 10000
int main()
{
int p, i, primes[N], prime_index = 2;
bool is_prime;
primes[0] = 2;
primes[1] = 3;
for (p = 5; p <= N; p = p + 2)/*只考虑偶数*/
{
is_prime = true;
for (i = 1; is_prime && p / primes[i] >= primes[i]; i++)
if (p % primes[i] == 0)
is_prime = false;
if (is_prime == true)
{
primes[prime_index] = p;
prime_index++;
}
}
for (i = 0; i < prime_index; i++)
printf("%i ", primes[i]);
printf("/n");
system("pause");
return 0;
}