NO9---蓝桥杯JAVA---幸运数---数学问题

幸运数是波兰数学家乌拉姆命名的。

它采用与生成素数类似的“筛法”生成。

首先从 11 开始写出自然数 1 2 3 4 5 6....

11 就是第一个幸运数。

我们从 22 这个数开始。

把所有序号能被 22 整除的项删除,变为:

1 _ 3 _ 5 _ 7 _ 9 ....

把它们缩紧,重新记序,为:1 3 5 7 9 ....

这时,33 为第 22 个幸运数,然后把所有能被 33 整除的序号位置的数删去。

注意,是序号位置,不是那个数本身能否被 33 整除!!

删除的应该是 5 11 17...

此时 77 为第 33 个幸运数,然后再删去序号位置能被 77 整除的(19 39 ...)。

最后剩下的序列类似:

1 3 7 9 13 15 21 25 31 33 37 43 49 51 63 67 69 73 75 79 ...

输入格式

输入两个正整数 m,n�,�,用空格分开。

输出格式

输出一个整数,表示位于 m� 和 n� 之间的幸运数的个数(不包含 m� 和 n�)。

数据范围

0<m<n<1060<�<�<106

输入样例1:
1 20
输出样例1:
5

import java.util.Scanner;

public class 幸运数 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc=new Scanner(System.in);
		int m=sc.nextInt();
		int n=sc.nextInt();
		int[]a=new int[n];
		for(int i=0;i<n;i++) {//存奇数1 3 5 7
			a[i]=2*i+1;
		}//删偶数
		
		
		int l=1;//幸运数下标
		while(true) {
			int p=l+1;
			for(int i=l+1;i<n;i++) {
				if((i+1)%a[l]==0) {}
				else {
					a[p]=a[i];
					p++;
				}
				if(a[i]>n)break;
			}
			l++;
			if(a[l]>=n)break;
		}
		int ans=0;
		for(int i=0;i<n;i++) {
			if(a[i]>=n)break;
			if(a[i]>m)ans++;
		}
System.out.print(ans);
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东箭武

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值