使用平方根的偶数除数
Number of even divisors using square root
本文关键字:平方根 更新时间:2023-10-16
我正在解决一个问题,它需要得到偶数和奇数除数之间的差,我需要使用sqrt()函数,因为数字的限制是10^9,所以在整个数字上循环不是一个选项,因为超过了时间限制。
这是我试着做的一个函数,但它并不能完全适用于所有数字。
Ex。4&48745.
情况4:应输出2个偶数除数{2,4}和1个奇数除数{1}——下面的函数输出3个偶数1个奇数
案例48745:应输出0个偶数除数和4个奇数除数{1,5974948745}——下面的函数输出2个偶数2个奇数
int di(int x)
{
int even=0,odd=0;
for(int i=1;i<=sqrt(x);i++)
{
if(x%i==0)
{
if(i%2)
odd++;
else
even++;
if(x/i %2==0 && x/i!=i)
even++;
else if(x/i!=i)
odd++;
}
}
return even-odd;
}
尝试更简单的代码:
#include <iostream>
#include <cmath>
int divdiff(int x)
{
unsigned int even = 0;
unsigned int odd = 0;
const unsigned int sqrtx = std::sqrt(x);
for (int i = 1 ; i <= sqrtx ; ++i)
{
if (x % i == 0)
{
if (i % 2 == 0)
{
++even;
}
else
{
++odd;
}
}
}
even *= 2;
odd *= 2;
if (x == sqrtx * sqrtx)
{
if (x % 2 == 0)
{
--even;
}
else
{
--odd;
}
}
std::cerr << __func__ << '(' << x << "): even=" << even << ", odd=" << odd << std::endl;
return even - odd;
}
int main()
{
std::cout << divdiff(2*2) << std::endl;
std::cout << divdiff(2*3) << std::endl;
std::cout << divdiff(3*3) << std::endl;
std::cout << divdiff(7*11*13*17*23) << std::endl;
}
相关文章:
- 平方根内禀反比
- 简单的平方根
- 是否有一个C++函数可以准确返回平方根反比的内置 CPU 操作 RSQRTSS 的值?
- 试图找到一个数字的平方根,但代码不起作用。C++
- 使用二分法查找数的平方根时出现问题
- 如何使用C 获取周期十进加点号的平方根
- C 平方根 /巴比伦法
- 这种浮点平方根近似是如何工作的
- 使用位移算法计算平方根始终输出相同的数字
- C 查找无SQRT函数循环故障的平方根
- 如何获取数组中每个数字的平方根 (C++)
- 为什么我不能在犰狳中得到这个对称正定矩阵的平方根?
- 平方根代码C 无SQRT()
- 编程手动平方根函数
- 如何在C 中找到具有20位精度的平方根
- 确定平方根是否是整数
- 歧义平方根
- 求解平方根反比
- 是否有用于双精度平方根反比的快速 C 或 C++ 标准库函数
- 如何利用遗传算法求C中数的平方根来实现选择和交叉