洛谷 - P1072 Hankson - 的趣味题 - 质因数分解
https://www.luogu.org/problemnew/show/P1072
一开始看了一看居然还想放弃了的.
把 \(x,a_0,a_1,b_0,b_1\) 质因数分解.
例如 \(x=p_1^{\alpha_1}p_2^{\alpha_2}...p_k^{\alpha_k}\)
由gcd的性质,对应指数的最小值,直接得一组方程.
再有lcm的性质,对应指数的最大值,再得一组方程.
设计起来不难但是写起来就慢多bug的.
第一次交70分,原因是质因数分解过慢!
应该一开始记录原本待分解数n的大小cn,当枚举p*p>cn时退出并判断n是否为1.
还有就是求两个闭区间的交集,应该定义两个量low和high,然后交集就是[maxlow,minhigh],别的都不对!
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define INF 0x3f3f3f3f
int used_p[300],utop;
bool check(int a0,int a1,int b0,int b1){
utop=0;
if(a0%a1!=0)
return false;
if(b1%b0!=0)
return false;
int pa0=a0;
for(int p=2;p<=a0&&p*p<=pa0;p++){
if(a0%p==0)
used_p[utop++]=p;
while(a0%p==0)
a0/=p;
}
if(a0!=1)
used_p[utop++]=a0;
int pb1=b1;
for(int p=2;p<=b1&&p*p<=pb1;p++){
if(b1%p==0)
used_p[utop++]=p;
while(b1%p==0)
b1/=p;
}
if(b1!=1)
used_p[utop++]=b1;
sort(used_p,used_p+utop);
utop=unique(used_p,used_p+utop)-used_p;
/*for(int i=0;i<utop;i++)
printf("p=%d\n",used_p[i]);*/
return true;
}
int cnt[4][300];
void prime_factorization(int a0,int a1,int b0,int b1){
memset(cnt,0,sizeof(cnt));
for(int i=0;i<utop;i++){
int p=used_p[i];
while(a0%p==0){
cnt[0][i]++;
a0/=p;
}
while(a1%p==0){
cnt[1][i]++;
a1/=p;
}
while(b0%p==0){
cnt[2][i]++;
b0/=p;
}
while(b1%p==0){
cnt[3][i]++;
b1/=p;
}
}
}
int main(){
int T;
scanf("%d",&T);
while(T--){
int a0,a1,b0,b1;
scanf("%d%d%d%d",&a0,&a1,&b0,&b1);
if(!check(a0,a1,b0,b1)){
printf("0\n");
continue;
}
prime_factorization(a0,a1,b0,b1);
ll ans=1;
for(int i=0;i<utop;i++){
int ail1=cnt[1][i],aih1=INF;
if(cnt[1][i]<cnt[0][i]){
aih1=min(aih1,cnt[1][i]);
}
int ail2=-INF,aih2=cnt[3][i];
if(cnt[3][i]>cnt[2][i]){
ail2=max(ail2,cnt[3][i]);
}
int l=max(ail1,ail2);
int h=min(aih1,aih2);
if(h<l){
ans=0;
}
else{
ans*=1ll*(h-l+1);
}
//printf("p=%d a[%d,%d]\n",used_p[i],cnt[0][i],cnt[1][i]);
//printf("p=%d b[%d,%d]\n",used_p[i],cnt[2][i],cnt[3][i]);
//printf("p=%d [%d,%d]\n",used_p[i],l,h);
}
cout<<ans<<endl;
}
}
洛谷 - P1072 Hankson - 的趣味题 - 质因数分解的更多相关文章
- 洛谷 P1072 Hankson 的趣味题 —— 质因数分解
题目:https://www.luogu.org/problemnew/show/P1072 满足条件的数 x 一定是 a1 的倍数,b1 的因数,a0/a1 与 x/a1 互质,b1/b0 与 b1 ...
- 洛谷 P1072 Hankson 的趣味题 解题报告
P1072 \(Hankson\)的趣味题 题目大意:已知有\(n\)组\(a0,a1,b0,b1\),求满足\((x,a0)=a1\),\([x,b0]=b1\)的\(x\)的个数. 数据范围:\( ...
- 洛谷P1072 Hankson 的趣味题
P1072 Hankson 的趣味题 题目描述 Hanks 博士是 BT (Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫 Hankson.现在,刚刚放学回家的 Hankson 正在思考一 ...
- Java实现洛谷 P1072 Hankson 的趣味题
P1072 Hankson 的趣味题 输入输出样例 输入 2 41 1 96 288 95 1 37 1776 输出 6 2 PS: 通过辗转相除法的推导 import java.util.*; cl ...
- 【题解】洛谷P1072 Hankson的趣味题 (gcd和lcm的应用)
洛谷P1072:https://www.luogu.org/problemnew/show/P1072 思路 gcd(x,a0)=a1 lcm(x,b0)=b1→b0*x=b1*gcd(x,b0) ( ...
- 洛谷P1072 Hankson 的趣味题(题解)
https://www.luogu.org/problemnew/show/P1072(题目传送) 数学的推理在编程的体现越来越明显了.(本人嘀咕) 首先,我们知道这两个等式: (a0,x)=a1,[ ...
- 洛谷 1072 Hankson 的趣味题——质因数界限讨论
题目:https://www.luogu.org/problemnew/show/P1072 思路是把每个数质因数分解,答案对于每个质因数的次数有选择的区间,通过这个计算. 指数的限制就是上限是b1, ...
- 洛谷 P1072 Hankson 的趣味题 || 打质数表的分解质因数
方法就是枚举,根据b0和b1可以大大减小枚举范围,方法类似这个http://blog.csdn.net/hehe_54321/article/details/76021615 将b0和b1都分解质因数 ...
- 洛谷P1072 Hankson的趣味题
这是个NOIP原题... 题意: 给定 a b c d 求 gcd(a, x) = b && lcm(c, x) = d 的x的个数. 可以发现一个朴素算法是从b到d枚举,期望得分50 ...
随机推荐
- IOS 学习记录
表情排列 // // MJViewController.m // 01-表情排列 // // Created by apple on 13-11-24. // Copyright (c) 2013年 ...
- java 连接mysql 和sql server2008代码
这两天用java分别连接mysql和sql server2008代码.刚開始都是有错.如今找到了在 自己机器上成功连接的代码: 1. mysql Class.forName("com.mys ...
- ASP.NET MVC4中ViewBag、ViewData和TempData的使用和区别
一.说明 本文章主要是讲解asp.net mvc中ViewBag.ViewData和TempData的使用和区别,ViewBag.ViewData和TempData常常用于将action方法中的数据传 ...
- 把tomcat写到Windows系统服务器的服务中
首先准备一个免安装的tomcat服务器,和一个Windows系统. 在“C:\Windows\SysWOW64”中找到cmd.exe的执行文件,以管理员身份启动: 进入到tomcat的bin文件夹, ...
- wireshark 学习 2
使用wireshark抓到的wifi数据包如果是加密的,就只能显示密文,无法得到真正的数据. 如果知道AP和SSID和key,就可以解密wifi数据包,显示上层协议的数据. 在wireshark中设置 ...
- GNU linux 中makefile那点事
转自陈皓: http://bbs.chinaunix.net/viewthread.php?tid=408225 概述—— 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为 ...
- CentOS-7-64bit 下为firefox安装flashplayer
最近更新了Centos 7 还是有一些不习惯的 给ff安flashplayer插件时,按centos 6.x的方法时都无法成功,后来find了一下,才知道firefox还有一个64bit的文件夹: 解 ...
- 向HTML页面传入参数
这次是想将参数传入HTML页面,通过js获取参数信息,动态生成HTML页面内容: 方法一: <script> function GetArgsFromHref(sHref, sArgNam ...
- LR-虚拟用户以进程和线程模式运行的区别
进程方式和线程方式的优缺点: 如果选择按照进程方式运行, 每个用户都将启动一个mmdrv进程,多个mmdrv进程会占用大量内存及其他系统资源,这就限制了可以在任一负载生成器上运行的并发用户数的数量,因 ...
- 将PHP数组输出为HTML表格
1. [代码][PHP]代码 <?phpclass xtable{ private $tit,$arr,$fons,$sextra; public function __con ...