在编程中,计算质数和合数通常可以通过以下几种方法实现:
1. 穷举法
穷举法是最简单直接的方法,通过遍历从2到n-1的所有整数,检查它们是否能整除n。如果能整除,则n是合数;如果都不能整除,则n是质数。
```c
include
int main() {
int n;
while (scanf("%d", &n) != EOF) {
int flag = 1;
for (int i = 2; i <= n / 2; i++) {
if (n % i == 0) {
flag = 0;
break;
}
}
if (flag) {
printf("%d 是质数\n", n);
} else {
printf("%d 是合数\n", n);
}
}
return 0;
}
```
2. 试除法
试除法也是通过遍历从2到n的平方根的所有整数,检查它们是否能整除n。如果能整除,则n是合数;如果都不能整除,则n是质数。这种方法比穷举法效率高,因为只需要检查到n的平方根。
```c
include include int isPrime(int num) { if (num <= 1) { return 0; } for (int i = 2; i * i <= num; i++) { if (num % i == 0) { return 0; } } return 1; } int main() { int num; printf("请输入一个整数: "); scanf("%d", &num); if (isPrime(num)) { printf("%d 是质数\n", num); } else { printf("%d 是合数\n", num); } return 0; } ``` 3. 埃拉托斯特尼筛法(Sieve of Eratosthenes) 埃拉托斯特尼筛法是一种高效的算法,用于找出小于或等于n的所有质数。算法的基本思想是标记出所有非质数,剩下的就是质数。 ```c include include include void sieveOfEratosthenes(int n) { bool prime[n + 1]; memset(prime, true, sizeof(prime)); prime = prime = false; for (int p = 2; p * p <= n; p++) { if (prime[p]) { for (int i = p * p; i <= n; i += p) { prime[i] = false; } } } for (int p = 2; p <= n; p++) { if (prime[p]) { printf("%d ", p); } } printf("\n"); } int main() { int n; printf("请输入一个整数: "); scanf("%d", &n); sieveOfEratosthenes(n); return 0; } ``` 4. 分解质因数法 分解质因数法是将一个合数分解成若干个质数的乘积。通过这种方法,可以判断一个数是否为质数,并找出它的所有质因数。 ```c include void primeFactors(int n) { int i; for (i = 2; i <= n; i++) { while (n % i == 0) { printf("%d ", i); n = n / i; } } printf("\n"); } int main() { int n; printf("请输入一个整数: "); scanf("%d", &n); if (n == 1) { printf("1既不是质数也不是合数\n"); } else { printf("%d 的质因数为: ", n); primeFactors(n); } return 0; } ``` 这些方法各有