【枚举算法】佩尔方程
来源:互联网 发布:阿尔布雷特 丢勒 知乎 编辑:程序博客网 时间:2024/04/28 05:44
佩尔方程是关于x、y的二次不定方程,表述为:
x^2 - ny^2 = 1 (n为非平方正整数)
当x = 1或-1,y = 0时,满足方程。常把x、y中有一个零的解称为平凡解。
佩尔方程的非平凡解有很多,这里只要求出它的最小正整数解,又称基本解。
算法分析:
设a = n*y*y,设置y从1开始递增,每次+1
若a + 1为某一个整数x的平方,则(x,y)即为佩尔方程的基本解。
若a + 1 不是平方数,则y + 1后再试,直到找到解为止。
在这里我们给y设置一个最大上限10000000,当大于这个值,输出"求解无果"
代码实现:
package cn.qblank.enumeration;import java.util.Scanner;/** * 解佩尔方程 * @author Administrator */public class Demo2 {public static void main(String[] args) {Scanner input = new Scanner(System.in);System.out.println("*****解佩尔方程:x^2 - ny^2 = 1*****");System.out.println("请输入非平方正整数n:");double n = input.nextInt();input.close();//是否为平方数if (isSqareNum(n)) {System.out.println("n为平方数,方程无正整数解");return;}//初始化y的值int y = 1;while(y <= 10000000){y++;//定义x和a的值 double a = n*y*y;//取整double x = Math.floor(Math.sqrt((a + 1)));//判断是否满足方程if (x*x == a + 1) {System.out.println("方程x^2 - " + n + "y^2 = 1的基本解为:");System.out.println("x = " + x + ",y = " + y);break;}}}/** * 判断n是否是平方数 * @param n * @return true 表示是平方数 false表示不是 */public static boolean isSqareNum(double n) {double m = Math.floor(Math.sqrt(n + 1));if (m * m == n) {return true;}return false;}}
运行结果:
阅读全文
0 0
- 【枚举算法】佩尔方程
- 佩尔方程
- 佩尔方程
- 佩尔方程
- 佩尔方程
- 佩尔方程
- 佩尔方程
- 佩尔方程
- 佩尔方程
- hdu2199 二分枚举解高次方程
- UVA10341 二分枚举解方程
- 佩尔方程 连分数法
- 佩尔方程求解问题
- 数论模板 - 佩尔方程
- 特殊的不定方程——佩尔方程
- C语言之基本算法26—佩尔方程求解
- noip2001 一元三次方程 (枚举+二分)
- 百钱百鸡问题 枚举 与 不定方程解法
- 从零开始创业,知名律师献上这套股权激励秘笈丨72问
- 实验一与实验二
- 装饰设计模式2
- Android] 内存泄漏调试经验分享 (一)
- Harbor部署
- 【枚举算法】佩尔方程
- RNN在自然语言处理中的应用及其PyTorch实现
- 购物类App原型制作分享-Lyst
- 【Git】Access denied
- git 的一些使用体验
- work9 2
- 富士康给员工分红平均33万元;京东诉公关营销公司抹黑;雷军当选全国工商联副主席丨价值早报
- nginx相关命令
- 计算两个时间的差