根号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; }
如果觉得《如何快速求一个数的所有因子数 c/c++》对你有帮助,请点赞、收藏,并留下你的观点哦!