加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 确定平方根是否为整数

发布时间:2020-12-16 10:41:02 所属栏目:百科 来源:网络整理
导读:在我的程序中,我试图找到数字600851475143的最大素数因子.我已经制作了一个for循环,它确定了该数字的所有因子并将它们存储在向量数组中.我遇到的问题是我不知道如何确定因子是否可以是平方根并且给出整数而不是小数.到目前为止我的代码是: #include iostrea
在我的程序中,我试图找到数字600851475143的最大素数因子.我已经制作了一个for循环,它确定了该数字的所有因子并将它们存储在向量数组中.我遇到的问题是我不知道如何确定因子是否可以是平方根并且给出整数而不是小数.到目前为止我的代码是:

#include <iostream>
#include <vector>
#include <math.h>

using namespace std;
vector <int> factors;

int main()
{
    double num = 600851475143;
    for (int i=1; i<=num; i++)
    {
        if (fmod(num,i)==0)
        {
            factors.push_back(i);
        }
    }

     for (int i=0; i<factors.size(); i++)
     {
         if (sqrt(factor[i]))                      // ??? 
     }
}

有人可以告诉我如何通过我的if语句确定一个数字是否可以平方根?

解决方法

int s = sqrt(factor[i]);
if ((s * s) == factor[i])

正如霍布??斯在评论中指出的那样,

Assuming that double is the usual 64-bit IEEE-754 double-precision float,for values less than 2^53 the difference between one double and the next representable double is less than or equal to 1. Above 2^53,the precision is worse than integer.

因此,如果您的int是32位,那么您是安全的.如果您必须处理大于2 ^ 53的数字,则可能会出现一些精度错误.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读