首页 > 试题广场 >

一个有序数列,序列中的每一个值都能够被2或者3或者5所整除,

[单选题]
一个有序数列,序列中的每一个值都能够被2或者3或者5所整除,这个序列的初始值从1开始,但是1并不在这个数列中。求第1500个值是多少?
  • 2040
  • 2042
  • 2045
  • 2050
推荐
答案:C
2、3、5的最小公倍数是30。[ 1, 30]内符合条件的数有22个。如果能看出[ 31, 60]内也有22个符合条件的数,那问题就容易解决了。也就是说,这些数具有周期性,且周期为30.
       第1500个数是:1500/22=68   1500%68=4。也就是说:第1500个数相当于经过了68个周期,然后再取下一个周期内的第4个数。一个周期内的前4个数:2,3,4,5。
故,结果为68*30=2040+5=2045
编辑于 2015-02-02 18:10:08 回复(39)
设x个数,x/2+x/3+x/5-x/6-x/10-x/15+x/30=1500解出来就行了
发表于 2016-02-15 20:01:39 回复(26)
在区间 [1, 30] 中,
能被2整除的数有 30 / 2 = 15 个,
能被3整除的数有 30 / 3 = 10 个,
能被5整除的数有 30 / 5 = 6 个,
能被2整除也能被3整除的数有 30 / 6 = 5 个,
能被2整除也能被5整除的数有 30 / 10 = 3 个,
能被3整除也能被5整除的数有 30 / 15 = 2 个,
能被2整除、能被3整除也能被5整除的数有 30 / 30 = 1 个,
根据集合的容斥定律可知:A∪B∪C = A + B + C - A ∩ B - B ∩ C - A ∩ C + A ∩ B ∩ C
因此,能被2整除或能被3整除或能被5整除的数的个数(不重复)为: 15 + 10 + 6 - 5 - 3 - 2 + 1 = 22
1500 / 22 = 68 ··· 4,[ 1, 30] 中,第4个满足条件的数是 5 ,而 68 * 30 = 2040, 因此第1500个数为
2040 + 5 = 2045
发表于 2016-04-10 20:41:13 回复(7)
选C
2040/2 = 1020   ....2040前有1019个能被2整除的数(2040本身可以被2整除)
2040/3 = 680  ....2040前有679个能被3整除的数
2040/5 = 408 ....2040前有407个能被5整除的数
2040/6 = 340 ....2040前有339个能被6整除的数(2和3的最小公倍数为6)
2040/10 = 204 ....2040前有203个能被10整除的数(2和5的最小公倍数为10)
2040/15 = 136 ....2040前有135个能被15整除的数(3和5的最小公倍数为15)
2040/30 = 68 ....2040前有67个能被30整除的数 (2、3、5的最小公倍数为30)

那么1019+679+407-339-203-135+67=1495(说明2040前面有1495个元素,也即2040是第1496个元素)
所以第1497是2042,第1498是2043,第1499是2044,第1500是2045
编辑于 2015-09-11 09:52:14 回复(9)

2,3,5之间互相不能整除,估考虑其最小公倍数是30,在30之中,能被2整除的有15个,能被3整除的有10个,能被5整除的有6个共有31个,而其中能同时被2,3整除的既是6的倍数有5个,被2,5整除既是10的倍数有3个,能被3,5整除既是15的倍数有2个,既有10个是被重复加入的,再加上2,3,5可以共同整除的30,1个。既在前30个数字中符合题目要求的有22个。1500除以22等于68余数为4既,在第69组三十个数的第4个即为所求答案。68*30=2040。每组中第一个数字是2,第二个数字是3,第三个数字是4,第五个数字是5。故其结果为2040+5=2045

发表于 2015-09-19 16:06:51 回复(5)
public int func(int n) {
     int k = 0;
     int number[] = new int[n + 1];
     int index[] = new int[3];

     number[k] = 1;
     index[0] = index[1] = index[2] = 1;

     while (k < n) {
         while (2 * index[0] <= number[k])
             index[0]++;

         while (3 * index[1] <= number[k])
             index[1]++;

         while (5 * index[2] <= number[k])
             index[2]++;

         number[++k] = min(2 * index[0], 3 * index[1], 5 * index[2]);
     }

     return number[n];
 }  
明天再找规律,先把代码贴上,运行结果为2045。 原理和寻找丑数类似。只不过丑数要求所有因子只有2,3,5而这个只需要含有2,3,5中一个就行。
编辑于 2015-04-15 01:16:34 回复(1)
容斥原理。n以内的个数为:n/2+n/3+n/5-n/6-n/10-n/15+n/30=n*22/30=1500。解出来n=2045
发表于 2017-08-06 19:21:59 回复(0)
hcj头像 hcj
# python 代码
A = set(range(2, 2100, 1))
B = set(range(2, 2100, 2))
C = set(range(3, 2100, 3))
D = set(range(5, 2100, 5))
E = A - B - C - D
F = A - E
print sorted(F)[1499]
# 输出2045
编辑于 2015-07-20 23:28:35 回复(2)
答案选B。
刚开始的时候先把符合条件的一个个写出来,寻找规律。
1~10     有8个符合的元素(除去1);
11~20    有6个符合的元素;
21~30    有8个符合的元素;
31~40      8
41~50      6
51~60      8
      ……
可以看出规律,即,1~30有22个,31~60有22个,……
1500/22=68   1500%68=4。
第1500个数相当于经过了68个周期,然后再取下一个周期内的第4个数。一个周期内的前4个数:2,3,4,5。不能忘记还有一个1,即要加上5。
故,结果为68*30=2040+5=2045
发表于 2015-01-31 10:10:04 回复(2)
2、3、5的最小公倍数是30。[ 1, 30]内符合条件的数有22个。如果能看出[ 31, 60]内也有22个符合条件的数,那问题就容易解决了。也就是说,这些数具有周期性,且周期为30.
       第1500个数是:1500/22=68   1500%68=4。也就是说:第1500个数相当于经过了68个周期,然后再取下一个周期内的第4个数。一个周期内的前4个数:2,3,4,5。
故,结果为68*30=2040+5=2045

代码解题法:
#include <iostream>

using namespace std;

void main()
{
	int num = 0;
	int sum = 0;

	for (int i = 1; i < 2051; i++)
	{
		if ((i % 2 == 0) || (i % 3 == 0) || (i % 5 == 0))
		{
			num++;
			sum = i;
		}
		if (num == 1500)
		{
			break;
		}
	}

	cout << sum << endl;
	
}


发表于 2022-03-04 19:50:51 回复(1)
链接:https://www.nowcoder.com/questionTerminal/ca0e1e453a25433cb18919055cb878fc
来源:牛客网
在区间 [1, 30] 中,
能被2整除的数有 30 / 2 = 15 个,
能被3整除的数有 30 / 3 = 10 个,
能被5整除的数有 30 / 5 = 6 个,
能被2整除也能被3整除的数有 30 / 6 = 5 个,
能被2整除也能被5整除的数有 30 / 10 = 3 个,
能被3整除也能被5整除的数有 30 / 15 = 2 个,
能被2整除、能被3整除也能被5整除的数有 30 / 30 = 1 个,
根据集合的容斥定律可知:A∪B∪C = A + B + C - A ∩ B - B ∩ C - A ∩ C + A ∩ B ∩ C
因此,能被2整除或能被3整除或能被5整除的数的个数(不重复)为: 15 + 10 + 6 - 5 - 3 - 2 + 1 = 22
1500 / 22 = 68 ··· 4,[ 1, 30] 中,第4个满足条件的数是 5 ,而 68 * 30 = 2040, 因此第1500个数为
2040 + 5 = 2045
发表于 2022-04-28 17:02:02 回复(0)
解析

2、3、5的最小公倍数是30。[ 1, 30]内符合条件的数有22个。
如果能看出[ 31, 60]内也有22个符合条件的数,那问题就容易解决了。
也就是说,这些数具有周期性,且周期为30.


第1500个数是:1500/22=68   1500%68=4。

也就是说:第1500个数相当于经过了68个周期,然后再取下一个周期内的第4个数。

一个周期内的前4个数:2,3,4,5。
故,结果为68*30=2040+5=2045

发表于 2021-04-24 17:04:57 回复(0)
可以写代码验证一下:
#include<stdio.h>
int main()
{
int i,count=0;
for(i=2; ;i++)
{
if((i%2==0)||(i%3==0)||(i%5==0))
count++;
if(count==1500)
printf("%d\n",i);
}
return 0;
}
输出2045
发表于 2015-11-10 19:43:42 回复(0)
#include <stdio.h>

int main()
{int n=0;
int i;
for (i=1;;i++)
{if (i%2==0||i%3==0||i%5==0)
 n=n+1;
if (n==1500) break;
}
printf("%d",i);
return 0;
}
笨方法
发表于 2015-09-17 21:36:44 回复(0)
//要么被2,要么被3,要么被5整除,假设第1500个数为x
int number(int n){
    if(n==0)
        return 1;
    int i=0;
    int j=number(n-1);
    for(j=number(n-1)+1;;){
        if(j%2==0 || j%3==0 || j%5==0)
            return j;
        else
            j++;
    }
}

发表于 2015-06-26 15:14:59 回复(0)
答案是2045,代码如下:
#include<iostream>
using namespace std;
int main() {
	long int i=0, s;
	for (s = 1; s<3000; s++){
		if (s % 2 == 0 || s % 3 == 0 || s % 5 == 0)
			i++;
		if (i == 1500)
			cout << s;
	}
}
发表于 2022-08-02 22:06:22 回复(0)
最小公倍数30,每三十个数有22个,2040有68个30,22×68=1496,然后第1497个是2042,2043,2044,2045。2045是1500个
发表于 2022-07-16 15:29:25 回复(0)
2,3,5最小公倍数30。2到30一共有22个数符合条件。 1500除以22得68余4。 第4个数是5。 68×30+5=2045
发表于 2022-07-01 21:22:12 回复(0)
public class test {
    public static void main(String[] args) {
        int count=0;
        for(int i=2;i<=10000;++i)
        {
            if (check(i))
            {
                ++count;
                if (count==1500)
                {
                    System.out.println(i);
                    return;
                }
            }
        }
    }

    private static boolean check(int i)
    {
        return i%2==0 || i%3==0 || i%5==0;
    }
}
代码的运行结果为2045;
发表于 2021-04-21 13:14:38 回复(0)
直接看代码:有注释!

发表于 2018-10-11 17:44:29 回复(0)
两分钟写个程序跑一下就出来了
private static int find(int j){ 
    int i = 0,num = 2;
    while(true){            
      if(num%2==0 || num%3==0 || num%5==0){                 
      if(++i == j) return num;             
      }num++;}}

编辑于 2018-08-16 09:45:45 回复(0)