证明时用到的斐波那契数列的性质
#include<cstdio>
#include<cstdlib>
#include<algorithm>
using namespace std;
typedef long long ll;
ll n,f[100];
int main(){
freopen("t.in","r",stdin);
freopen("t.out","w",stdout);
scanf("%lld",&n);
f[0]=1; f[1]=1; int p=1;
while (f[p]<n)
f[++p]=f[p-1]+f[p-2];
for (;;p--){
if (f[p]==n)
printf("%lld\n",n),exit(0);
if (n>f[p])
n-=f[p];
}
return 0;
}
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<set>
using namespace std;
typedef long long ll;
ll n,f[100];
set<ll> Set;
int main(){
freopen("t.in","r",stdin);
freopen("t.out","w",stdout);
f[0]=0; f[1]=1; int p=1;
while (f[p]<1LL<<31)
f[++p]=f[p-1]+f[p-2],Set.insert(f[p]);
while (1){
scanf("%I64d",&n); if (!n) break;
if (Set.count(n))
printf("Second win\n");
else
printf("First win\n");
}
return 0;
}