Lightoj-1220

https://vjudge.net/problem/LightOJ-1220

求x=bp中最大的p,x可能为负数。

因数分解,x=p1x1*p2x2*...*pnxn

x=(p1x1'*p2x2'*...*pnxn')q

如果x是正数的话,那么这个q最大就是gcd(x1,x2...xn),也就是答案了。

如果x是负数,那么q显然应该是个奇数,让求得的q不断/2直至为奇数即可。

题目明明说了x的范围在32为之内搞不懂为什么开LL才能过c。

 #include<iostream>
#include<cstring>
#include<queue>
#include<cstdio>
#include<stack>
#include<set>
#include<map>
#include<cmath>
#include<ctime>
#include<time.h>
#include<algorithm>
using namespace std;
#define mp make_pair
#define pb push_back
#define debug puts("debug")
#define LL long long
#define pii pair<int,int>
#define eps 1e-12 int gcd(int a,int b){
return b==?a:gcd(b,a%b);
} int main()
{
int n,m,i,j,k,t;
int cas=;
cin>>t;
while(t--){
int p=;
LL x;
bool fs=;
scanf("%lld",&x);
if(x<) x=-x,fs=;
int m=sqrt(x);
for(i=;i<=m;++i){
if(x%i==){
int tmp=;
while(x%i==){
tmp++;
x/=i;
}
p=gcd(p,tmp);
}
}
if(!p) p++;
if(fs) {
while(p%==) p/=;
}
printf("Case %d: %d\n",++cas,p);
}
return ;
}
上一篇:LVS负载均衡器DR模型的实现


下一篇:c# 线程 WPF 进度百分比(菜鸟)