在C语言编程中,处理质数是一个常见的需求,尤其是对于加密、算法优化等领域。高效地存储质数不仅能够节省内存空间,还能提升程序运行效率。本文将探讨几种在C语言中高效存储质数的方法与技巧。一、质数筛选法1....
在C语言编程中,处理质数是一个常见的需求,尤其是对于加密、算法优化等领域。高效地存储质数不仅能够节省内存空间,还能提升程序运行效率。本文将探讨几种在C语言中高效存储质数的方法与技巧。
线性筛法是一种高效筛选质数的方法,其基本思想是从小到大遍历自然数,将每个质数的倍数筛选出来,剩下的即为质数。这种方法的时间复杂度约为O(n log log n),空间复杂度约为O(n)。
#include
#define MAX_SIZE 1000000
int prime[MAX_SIZE], is_prime[MAX_SIZE];
void linearSieve(int n) { int i, j; for (i = 2; i <= n; i++) { if (!is_prime[i]) { prime[++prime[0]] = i; for (j = prime[0]; j && i * prime[j] <= n; j--) { is_prime[i * prime[j]] = 1; if (i % prime[j] == 0) { break; } } } }
}
int main() { int n; scanf("%d", &n); linearSieve(n); for (int i = 1; i <= prime[0]; i++) { printf("%d ", prime[i]); } return 0;
} 埃拉托斯特尼筛法是一种简单的质数筛选方法,其基本思想是从2开始,将所有2的倍数筛选出来,然后从下一个未被筛选的数开始,将所有该数的倍数筛选出来,依此类推,直到筛选完所有小于等于n的数。这种方法的时间复杂度约为O(n log log n),空间复杂度约为O(n)。
#include
#define MAX_SIZE 1000000
int prime[MAX_SIZE], is_prime[MAX_SIZE];
void sieveOfEratosthenes(int n) { int i, j; for (i = 2; i <= n; i++) { is_prime[i] = 1; } for (i = 2; i * i <= n; i++) { if (is_prime[i]) { for (j = i * i; j <= n; j += i) { is_prime[j] = 0; } } } for (i = 2; i <= n; i++) { if (is_prime[i]) { prime[++prime[0]] = i; } }
}
int main() { int n; scanf("%d", &n); sieveOfEratosthenes(n); for (int i = 1; i <= prime[0]; i++) { printf("%d ", prime[i]); } return 0;
} 位运算是一种高效的数值操作方法,可以将一个整数的每个二进制位独立操作。在C语言中,可以利用位运算来存储和判断质数,从而提高程序运行效率。
#include
#define MAX_SIZE 1000000
unsigned int is_prime_table[MAX_SIZE >> 1];
void setPrimeTable(int n) { int i, j; for (i = 0; i < n >> 1; i++) { is_prime_table[i] = 0; } for (i = 2; i * i <= n; i++) { if (!(is_prime_table[i >> 1])) { for (j = i * i; j <= n; j += i) { is_prime_table[j >> 1] = 1; } } }
}
int isPrime(int num) { if (num <= 1) { return 0; } if (num == 2) { return 1; } if (num % 2 == 0) { return 0; } int i; for (i = 3; i * i <= num; i += 2) { if (num % i == 0) { return 0; } } return 1;
}
int main() { int n; scanf("%d", &n); setPrimeTable(n); for (int i = 1; i <= n; i++) { if (isPrime(i)) { printf("%d ", i); } } return 0;
} 在C语言中,通过使用质数筛选法、位运算优化等方法,可以高效地存储和判断质数。这些方法能够提高程序运行效率,降低内存消耗,是C语言编程中处理质数的常用技巧。