題目來源:CF1110C
【簡要題意】給定a,求f(a)的最大值。
【分析】
當時,
否則,答案等於a除以除了1之外的最小因數。
具體證明也是分類討論。當時,在a所有是0位上b全爲1,其餘全爲0。顯然會有。由於b<a,所以一定不存在比它更大的數。
當有一個特殊性質可以寫成相當於把a分成幾份取其中的最大公因數。
【code】
x沒有每次打初始化結果只有十分。。。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
bool check(int x){
while(x>0)
if(x&1)x>>=1;
else return 0;
return 1;
}
int solve(int x){
for(int i=2;i*i<=x;i++)
if(x%i==0)return x/i;
return 1;
}
int main(){
freopen("meaning.in","r",stdin);
freopen("meaning.out","w",stdout);
int T,n,x;
cin>>T;
while(T--){
cin>>n;
if(check(n)) printf("%d\n",solve(n));
else{
while(x<n)x=(x<<1)+1;
printf("%d\n",x);
}
}
return 0;
}