站外题求助
  • 板块学术版
  • 楼主CooooldWind_
  • 当前回复12
  • 已保存回复12
  • 发布时间2023/10/10 20:31
  • 上次更新2023/11/2 14:36:15
查看原帖
站外题求助
747369
CooooldWind_楼主2023/10/10 20:31

#include<bits/stdc++.h>
using namespace std;

int p,ans;
bool buc[1000010];

int main(){
	cin >> p;
	for(int i = 0;i < p;i++){
		buc[(i * i) % p] = true;
	}
	for(int x = 0;x < p;x++){
		for(int a = 0;a < (p - 1) / 2;a++){
			if(buc[x - (a * a) % p]){
				ans = max(ans,a);
				break;
			}
		}
	}
	cout << ans;
	return 0;
}

代码如上,第二个样例输出12。

提供复杂度为O(n^3)的代码。

#include<bits/stdc++.h>
using namespace std;

int p;

int f(int x){
	for(int a = 0;a < p;a++){
		for(int b = a + 1;b < p;b++){
			int aa = a * a,bb = b * b;
			if((aa + bb) % p == x){
				return a;
			}
		}
	}
	return -1;
}

int main(){
	cin >> p;
	int ans = 0;
	for(int i = 1;i < p;i++){
		ans = max(ans,f(i));
	}
	cout << ans;
	return 0;
}
2023/10/10 20:31
加载中...