首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场

素数algo
EN

Stack Overflow用户
提问于 2020-06-05 16:25:30
回答 3查看 84关注 0票数 0

我被问到这个面试问题。面试结束后,我在谷歌上搜索了两个小时,我还没有找到一个答案,我猜这是一个常见的面试问题。我想提高自己,并想知道如何解决这个问题和类似的问题。给定整数X,如果P*P+q*q=X,则返回true

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-06-05 16:43:46

最简单的方法是从输入数字X的0到平方根运行一个循环,对于每个循环检查sqrt(X ^2)是否为整数。如果存在整数,则返回true,否则返回false。

代码语言:javascript
运行
复制
#include <math.h>      
#include<iostream>   
using namespace std;
int main () {
    int n;
    cin >> n;

    for (int i = 0; i < sqrt(n); i++) {

        if(floor(sqrt(n - i*i))==ceil(sqrt(n - i*i))){
            cout << "true " << i << "^2 + " << sqrt(n - i*i) << "^2 = " << n << endl;    
            return 0;
        } else {
            continue;
        }
    }
    cout << " Cant find two integers satifield a^2 + b^2 = n^2\n";
    return 0;
}

这个算法很简单,但是随着输入的增加,运行起来似乎需要时间。

票数 3
EN

Stack Overflow用户

发布于 2020-06-05 17:01:02

你没有代码,所以我会告诉你面试官对你的期望:

只在你指出P和Q是任何整数的注释中,这应该是问题的一部分,如果不是,您应该与interviewer

  • you确认P和Q是无符号整数,因为平方,而且P和Q不应该大于sqrt(X)

  • ,您应该能够通过蛮力搜索从0 t sqrt(X)找到P,q的答案,并检查所有combinations

  • you也可以从它生成一个动态规划问题,即列出从0到层的所有数字(sqrt(X)),然后把他们的正方形放进一个数组里。然后,制定一个算法从数组中搜索两个元素的和,等于X

票数 3
EN

Stack Overflow用户

发布于 2020-06-05 17:04:51

有一个定理,叫做两个平方定理之和,它说:

,一个大于1的整数可以写成两个平方的和当且仅当它的素数分解不包含升到奇数幂的3模4的素数同余。

也许你应该知道这件事。

这种检查是可行的。它需要分解X,这是一个众所周知的困难问题,但它只适合于较大的数字。如果X是一个64位数,那么您可以很容易地使用Pollard的Rho算法对其进行因子分析,这并不是很复杂。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62219987

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档