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 ...
随机推荐
- 洛谷 P1531 I Hate It
题目背景 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少.这让很多学生很反感. 题目描述 不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的 ...
- rhythmbox插件开发笔记2:背景知识学习 D-Bus&VFS&Gio& Python GTK+ 3
这次主要简单介绍下相关的背景知识 D-Bus&VFS&Gio& Python GTK+ 3 D-Bus D-Bus是开源的进程通信(IPC)系统,它允许多个进程进行实时通信. ...
- UVA 1661 Equation (后缀表达式,表达式树,模拟,实现)
题意:给出一个后缀表达式f(x),最多出现一次x,解方程f(x) = 0. 读取的时候用一个栈保存之前的结点,可以得到一颗二叉树,标记出现'X'的路径,先把没有出现'X'的子树算完,由于读取建树的时候 ...
- 后台返回平铺数据,如何转换成树形json并渲染树形结构,ant tree 异步加载
如何后台返回对象数组(平铺式) 1.根据字段标识(板块)获取根节点 ### initTreeData(dataOrg){ var resultArr=dataOrg[0] var secArr=[]; ...
- OpenCV2:第八章 界面事件
一.简介 OpenCV中提供了程序界面中的鼠标和键盘事件 二.鼠标事件 // 设置鼠标回调函数 void setMouseCallback ( const string& winname, ...
- Java获取字符串里面的重复字符
public static void main(String[] args) { String word="天地玄黄宇宙洪荒" + "日月盈昃辰宿列张" + & ...
- qemu-img管理虚拟机
qemu-img管理虚拟机 1. 查看正在运行的虚拟机 [root@idca-vm02 ~]# virsh list Id 名称 状态 ----- ...
- UIViewAnimationOptions
常规动画属性设置(可以同时选择多个进行设置) UIViewAnimationOptionLayoutSubviews:执行UIView动画时,自动更新Subview的Layout约束.. UIView ...
- js的工厂模式
工厂模式: 什么叫工厂模式,工厂就是大家大脑里想的那样,一个流水线作业的一个东西,只需要满足刚需就可以了,一个人,只干一件事,最后串起来,就是一个事件. 首先需要说一下工厂模式.工厂模式根据抽象程度的 ...
- Go统计键盘输入随机字母的个数
package main import "fmt" //通过键盘输入20个小写字母,统计个数 func main(){ //通过键盘器获取字符 var arr [20]byte f ...