1770 Dota英雄传之等级炮

来源:互联网 发布:模仿他人声音软件 编辑:程序博客网 时间:2024/04/28 15:51
 
描述

相信大家都知道 Dota 吧,其中有个英雄叫末日使者,它有个技能叫等级炮,其伤害原理如下:当对方等级是某些特定数的倍数时候造成额外 250 点伤害。

后来有人觉得 Dota 等级满级 25 级太少了,可以改成满级 B 级,又有人觉得 Dota 前期等级太低没意思,不如初始设成 A 级。

既然这些都改了,是不是我们也把等级炮的伤害原理也改一改呢?改成:
N 级的等级炮可以有 N 个不同的质数作为幸运数,它们分别为 P1、P2、…… 、PN。当对方的等级数不包含这些幸运数字之外的质因子时会有加成伤害,相信大家已经发现了当对方英雄是 1 级一定会承受加成伤害的。

现在问题出来了,当英雄从 A 级升到满级的过程(含 A 和 B)中,有多少个等级会承受额外伤害呢?

输入

输入包含多组数据。
对于每组数据,第一行为一个整数N(1 <= N <= 50),第二行则是 N 个质数 P1、P2、…… 、PN(2 <= Pi <= 50000),第三行两个数 A 和 B(1 <= A <= B <= 109)。
当 N = 0 时输入结束。

输出

每组数据输出一行,就一个数,为英雄从 A 级升到满级的过程中会承受额外伤害的等级的个数。

样例输入
3
2 3 5
1 10
2
2 7
1 10
0
样例输出
9
5
提示

对于第一组数据,等级数为 1、2、3、4、5、6、8、9、10 时都会承受加成伤害。
对于第二组数据,等级数为 1、2、4、7、8 时都会承受加成伤害。

 

模拟题

#include<iostream>using namespace std;long long below(long long n, const int *p, const int pn){if (n == 0) return 0;if (pn == 0) return 1;long long count = 0;while (n) {count += below(n, p, pn-1);n /= p[pn-1];}return count;}int main(){int p[100], pn, a, b;while (cin >> pn && pn){for (int i=0; i<pn; i++) cin >> p[i];sort(p, p+pn);cin >> a >> b;cout << below(b, p, pn) - below(a-1, p, pn) <<endl;}return 0;}


 

原创粉丝点击