C++程序输入一个正整数n(1 <= n <= 2*10^9),输出该整数的约数个数。
时间: 2024-10-28 14:11:19 浏览: 33
在C++中,计算一个正整数n的约数个数可以采用以下算法:
1. **埃拉托斯特尼筛法** (Sieve of Eratosthenes):对于较小的n,这是一种高效的计算方式。从2开始遍历到√n,对于每个数i,如果它是n的因子,那么就将n除以i并将i的所有倍数标记为非质数。最后,n的约数个数就是所有小于等于n且未被标记的数的数量。
```cpp
#include <iostream>
using namespace std;
int countDivisors(int n) {
int count = 0;
for (int i = 1; i * i <= n; i++) {
if (n % i == 0) {
count += 2; // 如果是偶数,就有两个约数(1, i),如果是奇数,先加1(i)
if (i != n / i) { // 避免重复计数,除非i已经是n/i
count -= 1; // 减去另一个相同的因子(n/i)
}
}
}
return count;
}
int main() {
int n;
cin >> n;
cout << "The number of divisors of " << n << " is: " << countDivisors(n);
return 0;
}
```
**直接循环** 对于较大的n,可以直接遍历从1到n,并增加每个因子到计数器。这种方法更适用于手动编程,但效率较低。
```cpp
int countDivisors(int n) {
int count = 0;
for (int i = 1; i <= n; i++) {
if (n % i == 0) {
count++;
}
}
return count;
}
```
阅读全文