-jT3求助
  • 板块学术版
  • 楼主HuaJunL
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/10/22 20:00
  • 上次更新2023/11/2 11:49:14
查看原帖
-jT3求助
756988
HuaJunL楼主2023/10/22 20:00

本蒟蒻的代码 不知道为什么死活有一个点过不去 能看似乎是在81行那里的问题 sqrt化简不了 小图灵说还是RE

using namespace std;
int flag[1005], arr[1005], cnt = 0;
void is_prime(int k) {
	flag[0] = flag[1] = 1;
	for (int i = 2; i <= k; i++) {
		if (!flag[i]) {
			arr[++cnt] = i;
		}
		for (int j = 1; j <= cnt && arr[j]*i <= k; j++) {
			flag[arr[j]*i] = 1;
			if (i % arr[j] == 0)break;
		}
	}
//	cnt--;
}
int main() {
//	freopen("upe.in", "r", stdin);
//	freopen("uqe.out", "w", stdout);
	int t, m;
	cin >> t >> m;
	is_prime(m);
//	for(int i=1;i<=cnt;i++){
//		cout<<arr[i]<<' ';
//	}
	while (t--) {
		int a, b, c;
		cin >> a >> b >> c;
		int a1, b1, c1;
		a1 = a;
		b1 = b;
		c1 = c;
		if (b * b - 4 * a * c < 0) {
			cout << "NO\n";
			continue;
		}
		int d = b * b - 4 * a * c;
//		cout<<d<<endl;
		if (d == 0) {
			if (b % (2 * a) == 0) {
				cout << -2 * a / b << endl;
			} else {
				a *= 2, b *= -1;
				if (a < 0) {
					a *= -1;
					b *= -1;
				}
				int k = abs(__gcd(a, b));
				a /= k;
				b /= k;
				if (a == 1)cout << b << endl;
				else cout << b << '/' << a << endl;
			}
		} else {
			int qwe = sqrt(d);
			if (qwe * qwe == d) {
				a *= 2;
				b *= -1;
				b += qwe;
				if (a < 0) {
					a *= -1;
					b *= -1;
				}
				int k = abs(__gcd(a, b));
				a /= k;
				b /= k;
				if (a == 1)cout << b << endl;
				else cout << b << '/' << a << endl;

			} else if (b == 0) {
//				cout<<1;
				int sd = b * b - 4 * a * c;
				int er = 1;
				for (int i = 1; i <= cnt; i++) {
					if (sd % (arr[i]*arr[i]) == 0) {
						er *= arr[i];
						sd /= arr[i];
						sd /= arr[i];
					}
				}
//				cout<<endl;
				a = a1;
				a *= 2;
				if (a < 0) {
					er *= -1;
					a *= -1;
				}
				int k = abs(__gcd(er, a));
				er /= k;
				a /= k;
				if (er != 1) {
					cout << er << '*';
				}
				//			cout<<a<<endl;
				if (a == 1)cout << "sqrt(" << sd << ")" << endl;
				else cout << "sqrt(" << sd << ")/" << a << endl;
			} else {
				a *= 2;
				b *= -1;
				if (a < 0) {
					a *= -1;
					b *= -1;
				}
				int k = abs(__gcd(a, b));
				a /= k;
				b /= k;
				if (a == 1)cout << b << '+';
				else cout << b << '/' << a << '+';
				int er = 1;
				for (int i = 1; i <= cnt; i++) {
					if (d % (arr[i]*arr[i]) == 0) {
						er *= arr[i];
						d /= arr[i];
						d /= arr[i];
					}
				}
				a = a1;
				a *= 2;
				if (a < 0) {
					er *= -1;
					a *= -1;
				}
				k = abs(__gcd(er, a));
				er /= k;
				a /= k;
				if (er != 1) {
					cout << er << '*';
				}
				//			cout<<a<<endl;
				if (a == 1)cout << "sqrt(" << d << ")" << endl;
				else cout << "sqrt(" << d << ")/" << a << endl;
			}
		}
	}
	return 0;
}
2023/10/22 20:00
加载中...