问题标题: 酷町堂:5606

0
0
已解决
宫成
宫成
中级守护
中级守护

5606   小C的数学(math)

经验值:1200 时间限制:1000毫秒

2020初中合肥市赛

不许抄袭,一旦发现,直接清空经验!

题目描述 Description

小C想要成为一名OIer,于是他提前学习数学,为OI做好铺垫。
这一天,他的数学老师给了一道题:给定正整数a,以及给定一个区间[b,c],其中b,c均为整数(b,c保证非负)。寻找所有合法的x,满足b≤x≤c,并且a能够整除x,即x除以a的余数为0。
可小C很懒,不想找出来所有的解,他只想知道这样的x有多少个。

输入描述 Input Description

从文件math.in中读取数据。
共一行,依次三个整数a,b,c,如题目所描述。

输出描述 Output Description

输出到文件math.out中
仅一行一个数,表示答案。

样例输入 Sample Input

【样例输入1】 2 3 6 【样例输入2】 3 1 7

样例输出 Sample Output

【样例输出1】 2 【样例输出2】 2

数据范围及提示 Data Size & Hint

对于40%的数据: 0<a≤103,0≤b≤c≤103;
对于70%的数据: 0<a≤107,0≤b≤c≤107;
对于100%的数据: 0≤a≤109,0≤b≤c≤1018.

怎么做到不超时

#include<iostream>

using namespace std;

int main(){

long long n,m,a,cnt=0;

cin>>a>>n>>m;

for(int i=n+1;i<=m;i++){

if(a%i==0||i%a==0){

cnt++;

}

}

cout<<cnt;

return 0;

}


0
已采纳
朱小川
朱小川
缔造者
缔造者

if(b%a==0){ cout<<c/a-b/a+1<<endl; }else{ cout<<c/a-b/a<<endl; }

0
李牧晓
李牧晓
中级天翼
中级天翼

定义:

long long u=b/a; long long v=c/a;

(a,b,c自己定义)

核心:

if(b%a==0){ cout<<v-u+1; } else{ cout<<v-u; }

我要回答