区间素数概率判定(高精度)
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 }