根号n的时间内求一个数的所有因子数
#include<bits/stdc++.h>
using namespace std;
int main() {
int a; //分解a的因子数
int b[100005]; // 将a的所有因子数保存在b数组
scanf("%d",&a);
int z=0;
for(int i=1;i*i<=a;i++) {
if(a%i==0) {
b[z++]=i;
if(i!=a/i) //两个因子数不相等则保存下来
b[z++]=a/i;
}
}
sort(b, b+z); //将因子数从小到大排序然后输出
for(int i=0;i<z;i++) {
printf("%d ",b[i]);
}
return 0;
}
这样便可以在sqrt(n)(根号n)时间内求出一个数的所有因数并输出
下面的代码则也是在sqrt(n)求一个数的所有因子总个数(不重复),和上面代码类似
#include<bits/stdc++.h>
using namespace std;
int main() {
int a;
scanf("%d",&a);
int ans=0; //ans是求a所有因子数的总个数
for(int i=1;i*i<=a;i++) {
if(a%i==0) {
ans++;
if(i!=a/i) { //两个因子数不相等
ans++;
}
}
}
printf("%d\n",ans);
return 0;
}