OpenJ_POJ C17J Pairs
来源:互联网 发布:TensorFlow pca 编辑:程序博客网 时间:2024/04/29 05:44
Problem
poj.openjudge.cn/practice/C17J?lang=en_US
vjudge.net/contest/194746#problem/J(密码:happytraining)
Meaning
给出一个正整数 M,求正整数对(x,y),使得存在正整数 p 和 q,满足:
Analysis
由于
但是,不能直接把 d 加入到答案,因为对于同一个(x,y),可能会有不同的数对(p,q)和(p’,q’),使得
注意到对于每一个枚举的 x,
可以用类似素筛的方法预处理出 [ 1 , M ] 中每个数的因子有哪些。这样看来很暴力,但看那个预处理的表又好像并没有很多。
Code
#include <cmath>#include <cstdio>#include <cstring>#include <vector>using namespace std;const int M = 800000;vector<int> div[M+1];void biao(){ for(int d = 1; d <= M; ++d) for(int n = d; n <= M; n += d) div[n].push_back(d);}bool vis[M+1];int main(){ biao(); int T; scanf("%d", &T); while(T--) { int m; scanf("%d", &m); int ans = 0; // 枚举 x^2 for(int x = 1, ex = sqrt(1.0 * m); x <= ex; ++x) { // 标记因子的出现 memset(vis, false, sizeof vis); // 枚举 p for(int p = 1, ep = m / x / x; p <= ep; ++p) { int n = m - p * x * x; // 移项后的式子左边 for(int i = 0; i < div[n].size(); ++i) if(!vis[div[n][i]]) // 该因子第一次出现 { vis[div[n][i]] = true; ++ans; } } } printf("%d\n", ans); } return 0;}
阅读全文
0 0
- OpenJ_POJ C17J Pairs
- OpenJ_POJ
- OpenJ_POJ
- OpenJ_POJ
- OpenJ_POJ
- OpenJ_POJ
- OpenJ_POJ
- Bomb! OpenJ_POJ
- OpenJ_POJ 1043
- OpenJ_POJ C17K Lying Island
- pairs
- pairs
- OpenJ_POJ C16D Extracurricular Sports 找规律、大整数类
- OpenJ_POJ C16D Extracurricular Sports(找规律,大整数)
- Event Pairs
- Palindrome Pairs
- Palindrome Pairs
- leetCode_Palindrome Pairs
- 栈
- 每日产品辣评:火拼小米,乐视发布65寸曲面分体式电视
- 红皮书实例2之使用ADO访问数据源
- LINUX学习笔记(十一)
- 腾讯众创空间亮相乌镇世界互联网大会 多平台连接创业者
- OpenJ_POJ C17J Pairs
- 选择排序及C++/java代码实现(SelectSort)
- 放大放大再放大 OPPO R7s再现经典超清画质
- 每日产品辣评:大诺记奥利奥重生,华硕发布三倍光学变焦新机
- qt 程序中读取 DXL360 倾角仪的数据
- C和C++区别(一)
- 给li标签中的span设置属性margin-bottom不生效
- 526. Beautiful Arrangement Difficulty: Medium
- 人民日报创意拼报引爆猜测:家驹周一见?