2067 - 函数

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 128 MB

MiaoWu定义了几种函数:

        C(n,k) 表示从n个物品中选出k个物品的方案数,用数学表达式就是 C(n,k)=(n!)/((k!)*(n-k)!)

        G(S)   表示集合S中所有元素的最大公约数,如果S={x1,x2,x3,...,xn},那么数学表达式就是 G(S)=gcd(x1,x2,x3,...,xn)

        F(n)   是新定义的一种能够表示喵星数学的函数,用数学表达式表示就是 F(n)= G({C(2*n,1),C(2*n,3),C(2*n,5),...,C(2*n,2*n-1)}) ; 

例如:F(6)=G(C(12,1),C(12,3),C(12,5),C(12,7),C(12,9),C(12,11))=G(12,220,792,792,220,12)=4

现在MiaoWu希望你能够帮助他快速求出这种函数的值。


题目输入

每行输入一个n,输入到文件结束。(2<=n<=10^9)

题目输出

每行输出M(n)的值。

输入/输出样例

输入格式

6
5
4

输出格式

4
2
8

C++解答

#include<stdio.h>
#include<math.h>

long long t,p,n,ans;
int main()
{
    //freopen("1.txt","r",stdin);
    //freopen("2.txt","w",stdout);
    while(~scanf("%lld",&n))
    {
        p=1;
        while(n%2==0)
            p++,n/=2;
        printf("%.0lf\n",pow(2,p));
    }
}

Java解答

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.math.BigInteger;
import java.util.*;

public class Main{
    public static void main(String args[]){
        Scanner cin=new Scanner(System.in);
        while(cin.hasNext()){
            long n=cin.nextLong();
            long ans=2;
            while(n%2==0){
                n/=2;
                ans*=2;
            }
            System.out.println(ans);
        }
    }
}