求证明结论
查看原帖
求证明结论
1308728
xsmfollower楼主2024/5/5 06:39

官方题解好像和我不太一样。

首先 x=1x=1 时答案为 11。

若 xx 被分解成了 a11×a21…an1a_1^1 \times a_2^1 \dots a_n^1 且 nn 是奇数,那么答案是 min⁡(a1,a2,…,an)\min(a_1,a_2,\dots,a_n)。

否则答案就是 11。求证明。

赛时代码:

#include<cstdio>
#define int long long
using namespace std;
const int N=1e5+10; int a[N],b[N];
signed main() {
  int x,cnt=0,tx; scanf("%lld",&x),tx=x;
  if(x==1) return printf("1"),0;
  for(int i=2;i*i<=x;i++) {
  	if(x%i) continue;
  	a[++cnt]=i;
  	while(!(x%i)) x/=i,b[cnt]++;
  }
  if(x>1) a[++cnt]=x,b[cnt]=1;
  if(cnt==1) return printf("%lld",tx),0;
  bool flag=true;
  for(int i=1;i<=cnt;i++) if(b[i]!=1) { flag=false; break; }
  if(flag) {
  	if(cnt&1) printf("%lld",a[1]);
  	else printf("1");
  }
  else printf("1");
  return 0;
}
2024/5/5 06:39
加载中...