所谓缘分数是指这样一对正整数 a 和 b,其中 a 和它的小弟 a−1 的立方差正好是另一个整数 c 的平方,而 c 正好是 b 和它的小弟 b−1 的平方和。例如 83−73=169=132,而 13=32+22,于是 8 和 3 就是一对缘分数。
给定 a 所在的区间 [m,n],是否存在缘分数?
输入格式:
输入给出区间的两个端点 0<m<n≤25000,其间以空格分隔。
输出格式:
按照 a 从小到大的顺序,每行输出一对缘分数,数字间以空格分隔。如果无解,则输出 No Solution
。
输入样例 1:
8 200
输出样例 1:
8 3 105 10
输入样例 2:
9 100
输出样例 2:
No Solution
代码实现:
import java.io.*; /** * @author yx * @date 2022-07-27 19:47 */ public class Main { static PrintWriter out=new PrintWriter(System.out); static BufferedReader ins=new BufferedReader(new InputStreamReader(System.in)); static StreamTokenizer in=new StreamTokenizer(ins); public static void main(String[] args) throws IOException { in.nextToken(); int m=(int) in.nval; in.nextToken(); int n=(int) in.nval; boolean flag=false; for (int i = m; i <= n ; i++) { int ans1=(int) Math.sqrt(i*i*i-(i-1)*(i-1)*(i-1)); if(ans1*ans1!=i*i*i-(i-1)*(i-1)*(i-1)){ continue; } int temp=ans1+1; for (int j = 1; j <=temp ; j++) { int ans2=j*j+(j-1)*(j-1); // System.out.println(i+" : "+j+" == "+ans1 +" ? "+ans2); if(ans1==ans2&&i!=1){ out.println(i+" "+j); flag=true; } } } if(!flag){ out.println("No Solution"); } out.flush(); } }
编辑