区间素数概率判定(高精度)

Euler is a well-known matematician, and, among many other things, he discovered that the formula n 2 + n + 41 produces a prime for 0 ≤ n < 40. For n = 40, the formula produces 1681, which is 41 ∗ 41. Even though this formula doesn’t always produce a prime, it still produces a lot of primes. It’s known that for n ≤ 10000000, there are 47,5% of primes produced by the formula! So, you’ll write a program that will output how many primes does the formula output for a certain interval. Input Each line of input will be given two positive integer a and b such that 0 ≤ a ≤ b ≤ 10000. You must read until the end of the file. Output For each pair a, b read, you must output the percentage of prime numbers produced by the formula in this interval (a ≤ n ≤ b) rounded to two decimal digits.

Sample Input

0 39

0 40

39 40

Sample Output

100.00

97.56

50.00

精度太坑

 1 #include<cstdio>
 2 int su[10005];
 3 int judge(int n)
 4 {
 5     int i;
 6     for(i = 2 ; i*i <= n ; i++)
 7     {
 8         if(n % i == 0)
 9         return 0;
10     }
11     return 1;
12 }
13 int main()
14 {
15     int i;
16     for(i = 0 ; i <= 10005 ; i++)
17     {
18         su[i]=judge(i*i+i+41);
19     }
20     int a,b;
21     while(scanf("%d %d",&a,&b)!=EOF)
22     {
23         double sum=0;
24         for(i = a ; i <= b ; i++)
25         {
26             sum+=su[i];
27         }
28         printf("%.2f\n",sum*1.0/(b-a+1)*100);
29     }
30 }

 

posted @ 2016-08-14 15:28  野小子&  阅读(464)  评论(0编辑  收藏  举报