常规依次遍历暴力算法计算,对应输入非常大的数,较慢地输出结果
#include <iostream>
using namespace std;
int main()
{
long long n,i,a[99999],k=0;
printf("输入一个整数: ");
cin>>n;
for(i=1; i <= n; ++i)
{
if (n%i == 0)
{
a[k]=i;k++;
}
}
for(long long j=0;j<k;j++)
cout<<a[j]<<" ";
return 0;
}
优化后的代码能够计算很大数的所有因数,并且速度很快
#include <bits/stdc++.h>
using namespace std;
int main()
{
long long i,n,k=0;//以下这段代码能计算很大数的所有因数(约数)并且速度很快
printf("输入一个整数: ");
cin>>n;
long long arr[99999];
for ( i = 1; i * i <= n; i++)
{
if (n % i == 0)
{
arr[k] = i;
k++;
if (n / i != i)
{
arr[k] = (n / i);
k++;
}
}
}
sort(arr,arr+k);
for(long long i=0;i<k;i++)
{
cout<<arr[i]<<" ";
}
return 0;
}
这是较为简短的代码,时间也很短,能够输出该数的所有因数
#include <bits/stdc++.h>
using namespace std;
int main()
{
long long n,i,a[9999],k=0;
cout<<"请输入一个数";
cin>>n;
for(i=1; i*i<=n; ++i)
{
if (n%i == 0)
{
a[k]=i;k++; //cout<<i<<" ";
a[k]=n/i;k++; //cout<<n/i<<" ";把2个除数都压入a数组,再通过sort排序,依次输出
}
}
sort(a,a+k);
for(int j=0;j<k;j++)
cout<<a[j]<<" ";
//cout<<__gcd(20,40);万能头文件 输入2个数的最大公因数 ,最小公倍数==a*b/__gcd(a,b)
return 0;
}