Prime Time UVA

来源:互联网 发布:直播行业数据分析 编辑:程序博客网 时间:2024/05/28 14:56

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

#include<cstdio>#include<cstring>#include<cmath>#include<cstdlib>#include<queue>#include<algorithm>#define ll long long#define inf 0x3f3f3f3f#define maxn 1000007  // 1e6+7using namespace std;int num[100010];int check(int n){    for(int i=2;i*i<=n;i++)    {        if(n%i == 0)            return 0;    }    return 1;}void init(){    for(int i=0;i<=10000;i++)    {        int tmp = i*i + i + 41;        num[i] = num[i-1];        if(check(tmp) == 1)            num[i] ++;    }}int main(){    init();    int a,b;    while(~scanf("%d%d",&a,&b))    {        int len = b-a+1;        int tmp2 = num[b] - num[a];        if(check(a*a+a+41) == 1)            tmp2 ++;        printf("%.2lf\n",( (tmp2*1.0) / (len*1.0) +1e-8 )* 100);        }    return 0;}
0 0
原创粉丝点击