求证正确性
查看原帖
求证正确性
688892
Fiendish楼主2023/5/28 20:49

哪位大佬可以跟我讲一讲为什么我这个程序过了?

#include<iostream>
#include<algorithm>
#include<queue>
#include<stack>
#include<deque>
#include<bitset>
#include<cmath>
#include<cstdlib>
using namespace std;
int t,f;
int main(){
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	long long n,x,y,k;
	cin>>t;
	while(t--){
		cin>>n>>k;
		f=0;
		if(k==0||n==k){
			cout<<0<<" "<<n<<endl;
			continue;
		}
		x=k,y=n-k;
		if(x%y==k){
			cout<<x<<" "<<y<<endl;
			continue;
		}
		if(n-k<k||n%k==0){
			cout<<-1<<endl;
			continue;
		}
		for(long long i=1;(i+1)*(i+1)<=n-k;i++){
			long long a=1ll*i;
			if((n-k)%(a+1)!=0) continue;
			if((a*n+k)%(a+1)!=0&&(((n-k)/(a+1)*n+k)%((n-k)/(a+1))!=0)) continue;
			x=(a*n+k)/(a+1),y=(n-k)/(a+1);
			if(x%y!=k){
				x=((n-k)/(a+1)*n+k)/((n-k)/(a+1)),y=n/((n-k)/(a+1));
				if(x%y!=k) continue;
				cout<<x<<" "<<y<<endl;
				f=1;
				break;
			}
			cout<<x<<" "<<y<<endl;
			f=1;
			break;
		}
		if(f==1) continue;
		cout<<-1<<endl;
	}
	return 0;
}
2023/5/28 20:49
加载中...