C++ 使用θ(n)效率按顺序打印除数
我正在努力正确地实现这一点。我想创建一个函数来确定用户输入的所有除数C++ 使用θ(n)效率按顺序打印除数,c++,algorithm,C++,Algorithm,我正在努力正确地实现这一点。我想创建一个函数来确定用户输入的所有除数userNum,并将它们输出给用户。当userNum=16时,我得到的是输出1 16 2 8。我没想到顺序是正确的,但我错过了4个,我正在努力找出原因。有什么想法吗?我试图以θ(sqrt(num))的效率来做这件事 void PrintDivisors(int num); int main() { int userNum; //Request user number cout << "P
userNum
,并将它们输出给用户。当userNum
=16时,我得到的是输出1 16 2 8。我没想到顺序是正确的,但我错过了4个,我正在努力找出原因。有什么想法吗?我试图以θ(sqrt(num))的效率来做这件事
void PrintDivisors(int num);
int main()
{
int userNum;
//Request user number
cout << "Please input a positive integer >=2:" << endl;
cin >> userNum;
PrintDivisors(userNum);
return 0;
}
void PrintDivisors(int num)
{
int divisorCounter;
for (divisorCounter = 1; divisorCounter < sqrt(num); divisorCounter++)
{
if (num % divisorCounter == 0 && num / divisorCounter != divisorCounter)
cout << divisorCounter << endl << num / divisorCounter << endl;
else if (num % divisorCounter == 0 && num / divisorCounter == divisorCounter)
cout << divisorCounter << endl;
}
}
void打印除数(int num);
int main()
{
int userNum;
//请求用户号码
coutusernum;
打印除数(userNum);
返回0;
}
无效打印除数(int num)
{
整数除数计数器;
对于(divisorCounter=1;divisorCounter 请务必仔细检查您的边缘状况
什么是sqrt(num)
在for
循环中通过测试的最大除数计数器是多少
4
能通过测试吗
我认为,如果你仔细观察这一行,并牢记这三个问题,你就会消除错误
将循环终止条件操作更改为,以使其在sqrt(n)时间复杂度下运行:
对于任何n=a X b。或者a这是我最终使用的解决方案,这也节省了空间复杂性。我一直在努力思考以升序循环解决方案的有效方法,但这一方法运行得非常快,比附加到向量或数组或一些奇怪的字符串串联更好
void printDivisors(int num)
{
for (int k = 1; k*k < num; k++)
{
if (num % k == 0)
cout << k << " ";
}
for (int d = sqrt(num); d >= 1; d--)
{
if (num % d == 0)
cout << num / d << " ";
}
cout << endl;
}
void打印除数(int num)
{
for(int k=1;k*k cout divisiorcountervector<int> otherNums;
for(i=1;i*i<n;i++) {
if(num%i==0){
cout<<i<<endl;
otherNums.push_back(n/i);
}
}
if(i*i == n) otherNums.push_back(i);
for(i=(int)v.size() - 1 ;i>=0;i--)
cout<<otherNums[i]<<endl;
void printDivisors(int num)
{
for (int k = 1; k*k < num; k++)
{
if (num % k == 0)
cout << k << " ";
}
for (int d = sqrt(num); d >= 1; d--)
{
if (num % d == 0)
cout << num / d << " ";
}
cout << endl;
}