不错原文地址:简单的数学问题(vijos p1319 数列)作者:烤鸭vijos p1319是标准的数学问题 老规矩没看题目的点击这里看题目 这个题乍一看和usaco的h mble n mbers差不多,但是,差远了.........(ps:背后一阵凉气,有人想k我的感觉) 这个题目为什么属于数学问题呢?好,解释一下,这个题,i^m中m只能被用一遍,所以,根据以下等式就可证明出为什么那么做了(ps:怎么做?还没说呢!) 为什么呢?因为a^i-a^(i-1)=(a-1)*a^(i-1),当a=2时sigma(求和)(a^i)(i从1到n-1)无限接近a^i,但永远小于 设一个数x表示要求的第n个数,于是,这个题就很明了了,将要求的第n个数转换成2进制,然后,从低位到高位进行运算,n=sigma(求和)(i从1到n)(n m[i]*a^i),n m[i]表示n转化成2进制后第i位上的数字,最后求出的x就是要求的第n个数 源码(仅具有参考价值): var k,n, ,p,i,s:longint; n m:array[1..1000]of longint; begin readln(k,n); while n div 20 do begin inc(p); n m[p]:=n mod 2; n:=n div 2; end; inc(p); n m[p]:=n; :=1; for i:= 1 to p do begin s:=s+ *n m[i]; := *k; end; writeln(s); end.