区间质数统计

计算 区间[a,b]的所有质数个数
2≤a<b≤10^9,b-a<=1000000

import java.util.Scanner;

public class Main {
    static final int MAX=1000000+10;
    static final boolean[] flag=new boolean[MAX];
    static final int[] prime=new int[MAX];
    static final boolean[] vis=new boolean[MAX];
    static int cnt=-1;
    static {//埃氏筛法
        for(int i=2;i*i<=50000;i++){
            if(!vis[i]){
                for(int j=i*i;j<=50000;j+=i)
                    vis[j]=true;
            }
        }
        for(int i=2;i<=50000;i++)
            if(!vis[i])
                prime[++cnt]=i;
    }
    public static void main(String[] args) {
        Scanner cin=new Scanner(System.in);
        int L=cin.nextInt();
        int R=cin.nextInt();
        System.out.println(Prime(L,R));
    }
    static int Prime(int L,int R){
        for(int i=0;i<=cnt;i++){
            for(int j=Math.max(2,(L-1)/prime[i]+1)*prime[i];j<=R;j+=prime[i]){
                if(j-L>=0)
                    flag[j-L]=true;
            }
        }
        int ans=0;
        for(int i=L;i<= R;i++)
            if(!flag[i-L])
                ++ans;
        return ans;
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,这个问题属于数学计算类问题,可以回答。下面是用Python统计区间[m, n]的素数的代码: ```python def is_prime(num): """判断一个数是否为素数""" if num < 2: return False for i in range(2, int(num**0.5) + 1): if num % i == 0: return False return True def prime_count(m, n): """统计区间[m,n]的素数个数""" count = 0 for num in range(m, n+1): if is_prime(num): count += 1 return count print(prime_count(2, 100)) # 输出结果为25,即[2,100]有25个素数 ``` 希望能对您有所帮助。 ### 回答2: 要用Python统计区间[m,n]的素数,可以使用循环和判断的方法。 首先,我们可以编写一个函数来判断一个数字num是否是素数。素数是指除了1和它本身之外没有其他除数的正整数。为了判断一个数字是否是素数,我们可以从2开始,逐个尝试num除以每个小于它的数字,如果存在能整除的数字,那么num不是素数;否则,num是素数。 接下来,我们可以在区间[m,n]内循环遍历所有数字,并调用判断素数的函数来判断每个数字是否是素数。如果某个数字是素数,我们可以将其打印出来或存储起来进行其他操作。 下面是一个示例代码,用于统计区间[m,n]的素数: ```python # 判断一个数字是否是素数 def is_prime(num): if num < 2: return False for i in range(2, int(num ** 0.5) + 1): if num % i == 0: return False return True # 统计区间[m,n]的素数 def count_primes(m, n): primes = [] for num in range(m, n+1): if is_prime(num): primes.append(num) return primes m = 1 n = 100 primes = count_primes(m, n) print(primes) ``` 在上述代码,首先定义了一个判断素数的函数`is_prime`,然后定义了`count_primes`函数用于统计区间[m,n]的素数。在主程序,我们指定了区间为[m, n] = [1, 100],并将结果打印出来。运行代码后,会输出区间内的所有素数。 注意:以上代码只是示例代码,仅适用于小范围的区间[m,n]。如果需要计算更大范围的素数,可能需要优化算法。 ### 回答3: 要统计区间[m,n]的素数,可以使用Python编程语言来实现。以下是一个简单的算法: 1. 首先,创建一个空的列表来存储找到的素数。 2. 使用一个for循环来遍历[m,n]区间的每一个数字。 3. 定义一个函数is_prime(num),用于判断一个数字是否为素数。在函数,使用一个for循环遍历2到num-1之间的每一个数字,如果num能够被任何一个数字整除,则返回False;如果循环结束后仍然没有能够整除num的数字,则返回True。 4. 在遍历区间的每一个数字时,调用is_prime()函数来判断是否为素数。 5. 如果一个数字被判断为素数,则将其添加到之前创建的存储素数的列表。 6. 循环结束后,可以输出找到的所有素数。 以下是具体的代码实现: ``` def is_prime(num): if num <= 1: return False for i in range(2, int(num**0.5)+1): if num % i == 0: return False return True def find_primes(m, n): primes = [] for num in range(m, n+1): if is_prime(num): primes.append(num) return primes m = int(input("请输入区间的起始值m:")) n = int(input("请输入区间的结束值n:")) result = find_primes(m, n) print("在区间[{0},{1}]的素数有:".format(m,n), result) ``` 运行程序后,输入区间的起始值m和结束值n,程序将会输出在该区间找到的所有素数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值