Nastya Studies Informatics
1 second
256 megabytes
standard input
standard output
Today on Informatics class Nastya learned about GCD and LCM (see links below). Nastya is very intelligent, so she solved all the tasks momentarily and now suggests you to solve one of them as well.
We define a pair of integers (a,b)good, if GCD(a,b)=x and LCM(a,b)=y, where GCD(a,b)denotes the greatest common divisor of a and b, and LCM(a,b)denotes the least common multiple of a and b.
You are given two integers x and y. You are to find the number of good pairs of integers (a,b) such that l≤a,b≤r. Note that pairs (a,b) and (b,a) are considered different if a≠b.
The only line contains four integers l,r,x,y (1≤l≤r≤109, 1≤x≤y≤109).
In the only line print the only integer — the answer for the problem.
1 2 1 2
2
1 12 1 12
4
50 100 3 30
0
In the first example there are two suitable good pairs of integers (a,b): (1,2) and (2,1).
In the second example there are four suitable good pairs of integers (a,b): (1,12), (12,1),(3,4) and(4,3).
In the third example there are good pairs of integers, for example, (3,30), but none of them fits the condition l≤a,b≤rl≤a,b≤r.
题意就是给你一个范围(l,r),让你找有多少个数对(a,b)满足a和b的最大公约数是x,最小公倍数是y
思路就是对x,y进行质因数分解,这样对于每一个质因数,就会有一个上界和一个下界,而a,b对应的质因数取值也只能取上界或者下界
这样就可以把所有满足条件的数对都找出来,然后再一个个的判断是否在(l,r)范围里。
很显然数对的个数不会超过2的二十次方左右,所以不会超时。
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<cstdlib>
#include<climits>
#include<functional>
#include<queue>
#include<vector>
#include<algorithm>
#define N 1000005
using namespace std; long long prime[N+],len=,pd[N+]= {}; void shushu()
{
pd[]=pd[]=; for(int i=; i<=N; i++)
{
if(pd[i]==)
{
prime[len++]=i;
} for(int j=; j<len; j++)
{
if(i*prime[j]>=N)
break;
pd[i*prime[j]]=;
if(i%prime[j]==)
break;
}
}
} long long l,r,x,y,team[],team1[]= {},team2[]= {},c1=,ans=; long long ff(long long a,long long b);
void f(long long x,long long a,long long b)
{ if(x==c1)
{
if(a>=l&&a<=r&&b>=l&&b<=r)
{
ans++; } return;
}
f(x+,a,b); if(team1[x]!=team2[x])
f(x+,a/ff(team[x],team1[x])*ff(team[x],team2[x]),b/ff(team[x],team2[x])*ff(team[x],team1[x])); } long long ff(long long a,long long b)
{
long long ans=; while(b>)
{
if(b%==)
{
ans*=a; } a*=a;
b/=; }
return ans;
} int main()
{
shushu(); scanf("%I64d %I64d %I64d %I64d",&l,&r,&x,&y); if(y%x!=)
{
printf("");
return ;
} for(int i=; i<len; i++)
{
if(y%prime[i]==)
team[c1++]=prime[i]; while(y%prime[i]==)
{
team2[c1-]++;
y/=prime[i]; } } if(y>)
{
team[c1++]=y;
team2[c1-]++;
} for(int i=; i<c1; i++)
{
while(x%team[i]==)
{
team1[i]++;
x/=team[i];
}
} long long a=,b=; for(int i=; i<c1; i++)
a*=ff(team[i],team1[i]);
for(int i=; i<c1; i++)
b*=ff(team[i],team2[i]); f(,a,b);
printf("%I64d",ans);
return ;
}
Nastya Studies Informatics的更多相关文章
- Nastya Studies Informatics CodeForces - 992B (大整数)
B. Nastya Studies Informatics time limit per test 1 second memory limit per test 256 megabytes input ...
- CF992B Nastya Studies Informatics 数学(因子) 暴力求解 第三道
Nastya Studies Informatics time limit per test 1 second memory limit per test 256 megabytes input st ...
- Nastya Studies Informatics CodeForces - 992B(增长姿势)
有增长姿势了 如果a * b == lcm * gcd 那么a和b为lcm因数 这个我之前真不知道emm... #include <bits/stdc++.h> #define mem( ...
- 【Codeforces 992B】Nastya Studies Informatics
[链接] 我是链接,点我呀:) [题意] 题意 [题解] 因为gcd(a,b)=x 所以设a = nx b = mx 又有ab/gcd(a,b)=lcm(a,b)=y 则nmx = y 即n(m*x) ...
- CodeForces 992B Nastya Studies Informatics + Hankson的趣味题(gcd、lcm)
http://codeforces.com/problemset/problem/992/B 题意: 给你区间[l,r]和x,y 问你区间中有多少个数对 (a,b) 使得 gcd(a,b)=x lc ...
- Codeforces Round #489 (Div. 2)
A. Nastya and an Array time limit per test 1 second memory limit per test 256 megabytes input standa ...
- Codeforces Round #489 (Div. 2) B、C
B. Nastya Studies Informatics time limit per test 1 second memory limit per test 256 megabytes input ...
- [Codeforces]Codeforces Round #489 (Div. 2)
Nastya and an Array 输出有几种不同的数字 #pragma comment(linker, "/STACK:102400000,102400000") #ifnd ...
- Codeforces Round #546 (Div. 2) C. Nastya Is Transposing Matrices
C. Nastya Is Transposing Matrices time limit per test 1 second memory limit per test 256 megabytes i ...
随机推荐
- vijos 1524 最小监视代价
背景 看到Vijos上此类型的题目较少,特地放一道上来给大家练练. 描述 由于yxy小朋友做了一些不该做的事,他被jzp关进了一个迷宫里.由于jzp最近比较忙,疏忽大意了一些,yxy可以在迷宫中任意走 ...
- 微信程序开发系列教程(三)使用微信API给微信用户发文本消息
这个系列的第二篇教程,介绍的实际是被动方式给微信用户发文本消息,即微信用户关注您的公众号时,微信平台将这个关注事件通过一个HTTP post发送到您的微信消息服务器上.您对这个post请求做了应答(格 ...
- 迅为10.1寸人机界面工业HMI安卓电容屏定制生产供应商
10.1寸人机界面介绍: 配置铁电存储器:非易失性记忆体,掉电后数据不丢失. 连接云端,支持云服务:数据综合管理,更有效率. 静电防护技术:高强度抗干扰,防静电,防电磁干扰. 提供所有接口的调用源码, ...
- IE6 bug总结
IE6bug总结: 1.双边距bug产生原因 margin的方向与浮动的方向相同 解决方法: 浮动的元素身上加 display:inline; ---------------------------- ...
- python之路——递归函数
阅读目录 楔子 初识递归 再谈递归 递归函数与三级菜单 递归函数与二分查找算法 楔子 在讲今天的内容之前,我们先来讲一个故事,讲的什么呢?从前有座山,山里有座庙,庙里有个老和尚讲故事,讲的什么呢?从前 ...
- Linux系统分区 进程管理 软件包安装
对于一块新的磁盘来说,系统能够使用需要有分区.格式化文件系统.挂载等主要操作,下面通过命令的方式对一块磁盘进行操作. 一. Linux系统分区 1.1 在虚拟机开机前选择虚拟机配置,添加一个新的SCS ...
- shell脚本,awk实现文件a的每行数据与文件b的相对应的行的值相减,得到其绝对值。
解题思路 文件 shu 是下面这样的.220 34 50 70553 556 32 211 1 14 98 33 文件 jian是下面这样的.1082 想要得到结果是下面这样的.210 24 40 6 ...
- 企业版https
http://www.cocoachina.com/bbs/read.php?tid=194213
- 121. Best Time to Buy and Sell Stock@python
Say you have an array for which the ith element is the price of a given stock on day i. If you were ...
- C语言之链接库
链接库是windows的术语,但对于Linux来说,其概念是一样的.我们通常会把一些相似或相近功能的程序生成链接库,这样的好处是: 1)便于共享,开发软件时如需要相同功能时,不需要将大量重复的代码整合 ...