当前位置:   article > 正文

蓝桥杯-幸运数_幸运数蓝桥杯

幸运数蓝桥杯

题意

问你先将能被2整除的序号对应的数筛掉,然后观察一下筛完后序号为2的这个数a,继续将序号能被a整除的数筛掉,然后再观察一下筛完后序号为a对应的这个数b,继续将能被b整除的序号对应的数筛掉,然后再观察一下筛完后序号为b对应的这个数c,继续将能被c整除的序号对应的数筛掉……

思路

首先我们先求出筛掉2的倍数,并用一个数组存下来,然后根据题意来模拟,也就是再筛掉能被2整除的序号对应位置上的数,然后再将筛完之后的数用另外一个数组b来存,因为我们要不断地循环,所以,我们还是要把b里面的数又倒回a里面,然后再将tmp++,当然我们还需要用一个变量t来记录这个数组的大小,最后再将t赋值给k来循环即可。

AC代码

#include <iostream>

const int N = 100005;
int a[N];
using namespace std;

int main()
{
    int i, k = 1, sum = 0;
    int n, m;
    cin >> m >> n;
    for(int i = 1; i <= 100000; i += 2) a[k++] = i;
    int tmp = 2;
    while(tmp <= 1000){
        int t = 1;
        int b[100005];
        for(int i = 1; i <= k; i++){
            if(i % a[tmp] != 0) b[t++] = a[i];
        }
        for(i = 1; i <= t; i++) a[i] = b[i];
        tmp ++;
        k = t;
    }
    for(i = 1; i <= k; i++)
        if(a[i] > m && a[i] < n) sum ++;
    cout << sum << endl;
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/929777
推荐阅读
相关标签
  

闽ICP备14008679号