求某个区间的素数

这是一个C语言实现的程序,用于找到并输出给定区间[m,n]内的所有素数。程序首先通过`findPrime`函数生成小于等于sqrt(n)的所有素数,然后使用这些素数检查[m,n]范围内的每个数是否为素数,并将结果写入文件。最后,程序返回该区间内素数的总数。" 139428542,11934545,谷歌黑客与DNS信息收集:网络安全实践,"['网络安全', '信息收集', '谷歌黑客', 'DNS', 'python']
摘要由CSDN通过智能技术生成
//find primes [0,n], and output to primes[]
unsigned int findPrime(const unsigned int n, unsigned int * primes)
{
if(n < 2)
return 0;
    
long long i,j,k;
bool * isPrimes = 0;
isPrimes = malloc((n+1)*sizeof(bool));
if (isPrimes == 0)
return -1;

memset(isPrimes, 0, sizeof(bool) * (n+1));

for (i=2,j=0; i<=n; i++)

if (isPrimes[j] == 0) // is primes
{
//所有素数的倍数都不是素数
primes[j++] = i;

for(k = 2; i*k <= n; k++)
isPrime[i*k] = 1;//is not primes
}
}


return j;//返回素数的个数
}




 //生成[m,n]之间的素数,写进文件
 unsigned int GeneratePrime(unsigned int m, unsigned int n)
{
if(n<2 || m>n)
return 0;


unsigned int primeNum = 0;
unsigned int tmp = sqrt(n);
unsigned int *primes = malloc(sizeof(unsigned int) * (tmp+1));
unsigned int k = findPrime(tmp, primes);//生成sqrt(n)以内的素数


char filename[50];
sprintf(filename, "prime%u-%u.txt", m, n);
FILE *fp = fopen(filename, "w");


if(m < 2)
m = 2;


for(long long i = m; i <= n; i++)
{
unsigned int tmp  = sqrt(i);
bool flag = true;
for(unsigned int j = 0; primes[j] <= tmp && j < k; j++)
{
if(i % primes[j] == 0)
{
flag = false;
break;
}
}


if(flag)
{
fprintf(fp, "%lld ", i);
primeNum++;
if(primeNum % 1000 == 0)
fprintf(fp, "\n");
}
}


fprintf(fp, "\nprime number:%d", primeNum);
fclose(fp);
free(primes);
return primeNum;//返回素数的个数
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值