hdu 4577 X-Boxes

这道题是数学题,数学渣表示只能打表找规律,以下为打的表:

1 2 4 
3 6 12 
5 10 20 
7 14 28 
8 16 32 
9 18 36 
11 22 44 
13 26 52 
15 30 60 
17 34 68 
19 38 76 
21 42 84 
23 46 92 
24 48 96 
25 50 100 
27 54 108 
29 58 116 
31 62 124 
33 66 132 
35 70 140 
37 74 148 
39 78 156 
40 80 160 
41 82 164 
43 86 172 
45 90 180 
47 94 188 
49 98 196 
......

我打了第一位最大100,k==3的表,很容易发现奇数全部出现,但是乱入的偶数是什么鬼(上面已用红字标明)。好吧,那我就把这些偶数全都提出来如下,最左边为提出来的偶数,除以8后得到一组神奇的数,这组数不就是原数列的第一位。可想而知这些偶数的集合除以一个常数后就变成了原问题,只不过规模变小了(因为除以一个常数),那么这个常数是什么呢,就是2^(k),哈哈是不是很神奇。


出现在其中的偶数 /8== ?
8 /8== 1
24 /8== 3
40 /8== 5
56 /8== 7
64 /8== 8
72 /8== 9
88 /8== 11


import java.util.*;
import java.io.BufferedInputStream;
import java.lang.*;
import java.math.*;


class Task{
	void solve(){
		Scanner in=new Scanner(new BufferedInputStream(System.in));
		int t;
		t=in.nextInt();
		while(t-->0){
			int k=3;
			int [] a=new int[1000];
			Arrays.fill(a, 0);
			ArrayList<Integer> res=new ArrayList();
			for(int i=1;i<100;i++){
				if( a[i]==0 ){
					if( (i&1)==0 )res.add(i);
					for(int j=0;j<k;j++){
						System.out.print( i*(1<<j) +" ");
						a[ i*(1<<j) ]=1;
					}
					System.out.println();
				}
			}
			System.out.println("出现在其中的偶数 /8== ?");
			for( Integer i:res ){
				System.out.println(i+" /8== "+i/8);
			}
		}
		in.close();
	}
}
public class Main {
	public static void solve(){
		Scanner in=new Scanner(new BufferedInputStream(System.in));
		int t=in.nextInt();
		while(t-->0){
			BigInteger n=in.nextBigInteger();
			int k=in.nextInt();
			BigInteger tmp=BigInteger.valueOf(1<<(k-1));
			BigInteger ans=BigInteger.ZERO;
			while( n.compareTo(BigInteger.ZERO)==1 ){
				ans=ans.add(n.divide(tmp).add(BigInteger.ONE).divide(BigInteger.valueOf(2)));
				n=n.divide(tmp.multiply(BigInteger.valueOf(2)));
			}
			System.out.println(ans);
		}
		
		
	}
	public static void main(String[] args) {
		solve();
	}
}






评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值