当前位置: 首页 > Linux

for循环的使用与优化:求解整数不定方程

时间:2023-04-06 11:31:44 Linux

定性分析如何得到这个方程的整数解?参考视频方程:函数f1、f2和f3:%20%3D%20x%5E2%2B%20615)%20%3D%202%5Ex)%20%3D%20x%5E2)f1和f2的导数,即曲线f的斜率,理论上,f2的斜率比f1陡,f1和f2只有有限的几个交点。%20%3D%202x)%20%3D%202%5Exln2)方程的整数解是曲线f1和f2的交点。由于f1不便画出,从f2和f3的形状可以推断出f1和f2只有有限的交点。因为f3只是f1的翻译。f2和f3的图像如下所示,显然只有有限的交叉点。ps:x是对称的,所以如果有整数解x,-x也是它的解。下面的讨论是基于x是正整数这一事实。大力创造奇迹的点子,不管三七二十一,x和y从0开始,按自然数递增的方式试。有两层循环,外层是x,内层是y。然后尝试计算f1和f2,如果f1==f2则打印结果,终止循环。不过这里可以做一点局部优化,即x^2+615=2^y>=615可以产生y>9。外层循环x从0开始,内存循环可以从10开始。代码equation.cpp#include#includeusingnamespacestd;intmain(intargc,char*argv[]){if(argc<3)return-1;长n=atol(argv[1]);长m=atol(argv[2]);布尔标志=假;//寻找解的flag,找到则为true,未找到为falsefor(longx=0;x#includeusingnamespacestd;intmain(intargc,char*argv[]){如果(argc<3)返回-1;长n=atol(argv[1]);长m=atol(argv[2]);布尔标志=假;for(longk=1;k#includeusingnamespacestd;intmain(intargc,char*argv[]){if(argc<2)return-1;长n=atol(argv[1]);长长p=512;//2^9==512for(longy=10;y