NEFU119 组合素数

  原题链接:http://acm.nefu.edu.cn/JudgeOnline/problem/119.jsp

  本来数论就弱爆,又忽略了精度调整wa了一下午。

  直接用公式表示为:

  sum = ([2n / p] - 2[n / p]) + ([2n / p2] - 2[n / p2]) +……+ ([2n / pt] - 2[n / pt])

  其中 t = [logp(2n)]。

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <math.h>
 4 
 5 int main()
 6 {
 7     int t, n, p, i, cnt, m;
 8     scanf("%d", &t);
 9     while(t --)
10     {
11         scanf("%d%d", &n, &p);
12         int s = (int)(log10(2.0 * n) / log10(p + 0.0) + 1e-6); // !
13         for(cnt = 0, m = i = 1; i <= s; i ++)
14         {
15             m *= p;
16             cnt += (2 * n) / m - 2 * (n / m);
17         }
18         printf("%d\n", cnt);
19     }
20     return 0;
21 }

 

  从double强制转化为int的时候都是要调整精度的!!!

  

posted @ 2012-09-18 16:50  芒果布丁  阅读(251)  评论(0编辑  收藏  举报