社区讨论

服了!

灌水区参与者 2已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@luz7jvx8
此快照首次捕获于
2024/04/14 15:31
2 年前
此快照最后确认于
2024/04/14 16:56
2 年前
查看原帖
CPP
#include <bits/stdc++.h>
using namespace std;
#define in long long

/*bool isPrime(in n) {
	if(n == 1) {
		return false;
	}
	if(n == 2 || n == 3 || n == 5 || n == 7) {
		return true;
	}
	if(n % 2 == 0 || n % 3 == 0 || n % 5 == 0 || n % 7 == 0) {
		return false;
	}
	return true;

}
*/
bool isPrime(int x) {
	if( x == 1){
		return false;
	}
	if (x == 2 || x == 3 || x == 5 || x == 7) { //将两个小数额外处理
		return true;
	}
	if (x % 6 != 1 && x % 6 != 5) { //余数不是1和5的一定不是质数
		return false;
	}
//余数是1和5的数也不一定是质数
//还是要跑循环,但这次我们是 i+=6 ,不再是单纯无脑的i++了
//这也是速度提升的关键
//如果一个数不能整除比它小的任何质数,那么这个数就是质数
	int tmp = sqrt(x);
	for (int i = 5; i <= tmp; i += 6) {
//i可以表示为6a+5,i+2可以表示为6b+1
		if (x % i == 0 || x % (i + 2) == 0) {
			return false;
		}
	}
//排除所有剩余的是质数数
	return true;
}
in n,k=1,ans,l;
signed main() {
	ios::sync_with_stdio(false);
	cin>>n;
	long long int a[(in)n/2+1] = {0};
	a[0] = 0;
	if(isPrime(n) == true) {
		cout<<n<<endl;
		return 0;
	}
	l = n;
	for(in j=1; j<=l; j++) {
		for(in i=2; i<=n; i++) {
			if(isPrime(i) == false && i + 1 <= n) {
				i++;
			} else if(isPrime(i) == true && n % i == 0 && isPrime(n) == false) {
				a[k]=i;
				k++;
				n/=i;
			}
		}
		if(isPrime(n) != false){
		
			break;
		}
	}
	a[k] = n;
	for(in j=1; j<=l; j++) {
		if(n % 5 == 0){
			a[k]=5;
			k++;
			n/=5;
			if(isPrime(n) != false){
				a[k] = n;
				break;
			}
		}
	}
	sort(a+1,a+k+1);
	for(in i=1; i<=k; i++) {
		if(a[i]!=1 && (a[i]!=a[i-1]) && (a[i]!=a[i+1]) && i + 1 <= k && a[i] != 0) {
			cout<<a[i]<<" * ";
		} else if(a[i]!=1 && a[i] == a[i+1] && i + 1 <= k && a[i] != 0) {
			for(in j=i; j<=k; j++) {
				if(a[i]!=a[j]) {
					break;
				} else {
					ans++;
				}
			}
			if(i + ans - 1 < k) {
				i+=ans-1;
			} else {
				cout<<a[i]<<"^"<<ans;
				return 0;
			}
			cout<<a[i]<<"^"<<ans<<" * ";
			ans=0;
		} else if(a[i]!=1 && (a[i]!=a[i-1]) && (a[i]!=a[i+1]) && i + 1 >= k && a[i] != 0) {
			cout<<a[i]<<endl;
			return 0;
		} else if(a[i]!=1 && a[i] == a[i+1] && i + 1 >= k && a[i] != 0) {
			for(in j=i; j<=k; j++) {
				if(a[i]!=a[j]) {
					break;
				} else {
					ans++;
				}
			}
			cout<<a[i]<<"^"<<ans<<endl;
			return 0;
		}
	}
	return 0;
}
B3871这题错在哪啊!!!

回复

2 条回复,欢迎继续交流。

正在加载回复...