确定平方根是否为整数

use*_*400 3 c++ arrays math loops sqrt

在我的程序中,我试图找到数字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]))                      // ??? 
     }
}
Run Code Online (Sandbox Code Playgroud)

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

dav*_*vir 10

int s = sqrt(factor[i]);
if ((s * s) == factor[i]) 
Run Code Online (Sandbox Code Playgroud)

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

假设double是通常的64位IEEE-754双精度浮点数,对于小于2 ^ 53的值,一个double和下一个可表示的double之间的差值小于或等于1.高于2 ^ 53,精度为比整数差.

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

  • 假设“double”是通常的 64 位 IEEE-754 双精度浮点数,对于小于 2^53 的值,一个“double”与下一个可表示的“double”之间的差异小于或等于 1。高于 2 ^53,精度比整数差。 (2认同)