Lightoj1282

求n^k的前三位的方法:对于给定的一个数n,它可以写成10^a,其中这个a为浮点数,则n^k=(10^a)^k=10^ak=(10^x)(10^y);其中x,y分别是a*k的整数部分和小数部分,对于t=n^k这个数,它的位数由(10^x)决定,它的位数上的值则有(10^y)决定,因此我们要求t的前三位,只需要将10^y求出,在乘以100,就得到了它的前三位。

fmod(f,(int)f)即可得到小数点后的部分。

POJ 2115

题意:for(i=A;i!=B;i+=C){i%(2^k)};问你循环执行几次?

解题思路:

(A+s*C)%2^k=B

(A+s*C)≡B(mod 2^k)

sC-m2^k=B-A

LightOj 1341

a<b*b可以剪枝剪掉。

LightOj 1234

分组打表。

LightOj 1336

考虑奇数+打表找规律。

LightOj 1213

最内层的加法式子执行了n^K次,每次加了K个数,所以一共加了Kn^K个数,一共有n个数,每个数加的次数一定是相同的,所以每个数都加了Kn^(K-1)次,所以结果就是SumKn^(K-1)%mod。

UVA 11752

题意:

如果一个数可以表示成两个或以上的数的幂,就是超级幂;

例如64 = 8^2 = 4^3;

求1到2^64-1所有的的超级幂;题目没有输入;

解题思路:

所有数的合数(不是素数就是合数)次幂,都是超级幂;

所以求所有每个数的合数次幂;

double ceil(double x):返回大于或者等于指定表达式的最小整数。

指数上限:int limit=(int)ceil(64*log(2)/log(i))-1;

unsigned long long输出格式是%llu。

LightOj 1245

题意:求f(n)=n/1+n/2…..n/n,其中n/i保留整数。

解题思路:可以找规律,知道只要枚举到sqrt(n)即可,剩下的得数是连续的,所以算出个数就可以算出f(n)了。

51nod 1179

题意:给出N个正整数,找出N个数两两之间最大公约数的最大值(1 <= S[i] <= 1000000)。

思路:由范围知道可以分解出因子,并且计数,找到最大的cnt[i]>=2的i即为答案。


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!

KMP&扩展KMP&Manacher专题 Previous
基础DP1专题 Next