素数判定
int isPrime(int n)
{
int i, limit;
if (n <= 1)
{
return 0;
}
if (n == 2)
{
return 1;
}
if (n % 2 == 0)
{
return 0;
}
limit = sqrt(n) + 1;//n 如果有任何因子,肯定有一个小于等于√ A
// 这里+1是因为sqrt()浮点数是近似的
// 比如 n = 121 sqrt(n) 有可能等于10.999999999999 也有可能等于11.000000000001
for (i = 3; i <= limit; i+=2)
{
if( n % i== 0)
{
return 0;
}
}
return 1;
}
一定范围内素数求解
- 自然数分为0, 1, 质数, 合数
- 合数:任何一个合数可以分解为质数的乘积(质数可以相同)
- 挖去 0,1 和 合数(质数的倍数),留下的就是质数
void Prime(int a[], int len)
{
int i;
a[0] = 0;
a[1] = 0;
a[2] = 2;
// 预处理数组
for (i = 3; i <= len; i++)
{
if (i % 2 != 0)
{
a[i] = i;
}
else
{
// 去掉偶数
a[i] = 0;
}
}
int j;
int limit = sqrt(len) + 1;
for (i = 3; i <= limit; i += 2)
{
if (a[i] != 0)
{
// 将素数的倍数清零
for(j = i + i; j <= len; j += i)
{
a[j] = 0;
}
}
}
}