7-3 缘分数 (20 )

所谓缘分数是指这样一对正整数 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

 

#include<iostream>
#include<cmath>
using namespace std;
//a*a*a-(a-1)*(a-1)*(a-1)==(b*b+(b-1)*(b-1))*(b*b+(b-1)*(b-1));
int pingfang[100000];
int main(){
	for(int i=2;;i++){
		int p=i*i+(i-1)*(i-1);
		if(p>100000){
			break;
		}
		pingfang[p]=i;
	}
	int m,n;
	cin>>m>>n;
	int flag=0;
	for(int i=m;i<=n;i++){
		int p=i*i*i-(i-1)*(i-1)*(i-1);
		int s=p;
		p=sqrt(p);
		if(pingfang[p]!=0&&(sqrt(s)-p)<0.001){
		
			flag=1;
			cout<<i<<" "<<pingfang[p]<<endl;
		}
	}if(flag==0){
		cout<<"No Solution";
	}
	return 0;
}