HDU2866 Special Prime
题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=2866
题意:在区间[2,L]内,有多少个素数p,满足方程有解。
分析:
原方程变为: n^(b-1) * (p+n) = m ^ b。
一开始,我们会想,这个方程在什么时候是有解的呢??
肯定当左边式子能够凑成形如 X^b 这样的式子对不对??
那么,也就是说,一定不存正整数k使得n = k*p。
即当且仅当gcd(n^(b-1),(p+n)) = 1时方程有解。
为什么??
我们利用反证法可以进行证明:
假设 gcd(n^(b-1) , (p+n)) != 1
则一定存在一个正整数k,使得 n = k*p。
则该等式转化为: (k+1)* k ^ (b-1) * p^b = m ^ b;
要使等式两边相等,那么(k+1)*k^(b-1)必须配成幂次b的形式。
又因为gcd(k,k+1) = 1。
所以它两无公因子,无法配成x的b次方形式。
所以当gcd(n^(b-1) , (p+n) ) != 1时该方程无解。
通过上面的证明,我们知道该方程有解的条件。
设 n = x ^ b, p+n = y^b,
则 m = x ^(b-1) * y , 且p = y^b - x^b;
因为p = y^b-x^b = (y-x)*(y^(n-1)+y^(n-2)*x+...+x^(n-1)),
对于上面的式子来自幂方差公式: (a^n - b^n) =(a-b)(a^(n-1) + a^(n-2)*b + ... + b^(n-1))
所以 (y-x)|p ,又因为p为质数, 所以能整除p的只有1与p本身,很明显的, y-x != p ,所以 y-x=1, ---> y = x+1;
所以p = (x+1)^b-x^b;
所以我们只要枚举x然后计算出p并且判断其是否为质数即可。
下面帖代码,有问题留言。
#include<cstdio>
#include<cstring>
typedef long long LL; bool is_prime(int n){
if(n <= )return false;
for(int i = ; i*i <= n; i++)
if(n % i == )return false;
return true;
} int main(){
int L;
while(~scanf("%d",&L)){
int ans = ;
int k = ;
while((LL)*(k+)*(k+)*(k+)-k*k*k <= L){
if(is_prime((LL)*(k+)*(k+)*(k+) - k*k*k))ans++;
k++;
}
if(ans == )printf("No Special Prime!\n");
else printf("%d\n",ans);
}
return ;
}
HDU2866 Special Prime的更多相关文章
- 题解-hdu2866 Special Prime
Problem hdu-2866 题意:求区间\([2,L]\)有多少素数\(p\)满足\(n^3+pn^2=m^3\),其中\(n,m\)属于任意整数 Solution 原式等价于\(n^2(p+n ...
- 【HDU】2866:Special Prime【数论】
Special Prime Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...
- Special Prime
Special Prime Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...
- hdu-2886 Special Prime---数论推导
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2866 题目大意: 问你1到L中有多少个素数满足n^3 + p*n^2 = m^3(其中n,m为大于1 ...
- 字符串经典的hash算法
1 概述 链表查找的时间效率为O(N),二分法为log2N,B+ Tree为log2N,但Hash链表查找的时间效率为O(1). 设计高效算法往往需要使用Hash链表,常数级的查找速度是任何别的算法无 ...
- 几种经典的Hash算法的实现(源代码)
来源声明: http://blog.minidx.com/2008/01/27/446.html 先保存下来,以备后面研究,现在还看不懂! 哈希算法将任意长度的二进制值映射为固定长度的较小二进制值,这 ...
- hash算法和常见的hash函数 [转]
Hash,就是把任意长度的输入,通过散列算法,变换成固定长度的输出,该输出就是散列值. 这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能 会散列成相同的输出,而不 ...
- Java 素数 prime numbers-LeetCode 204
Description: Count the number of prime numbers less than a non-negative number, n click to show more ...
- HDU 4569 Special equations(取模)
Special equations Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u S ...
随机推荐
- UINavigationController具体解释(一)
@UINavigationControlle简单介绍: 1.导航控制器,专门管理控制器的控制器. 2.採用栈的方式管理全部controller,每一个controller管理各自的视图 @UINavi ...
- 解析Qt元对象系统(五) Q_INVOKABLE与invokeMethod(automatic connection从Qt4.8开始的解释已经与之前不同,发送对象驻足于哪一个线程并不重要,起到决定作用的是接收者对象所驻足的线程以及发射信号(该信号与接受者连接)的线程是不是在同一个线程)good
概述查看Qt源码可知,Q_INVOKABLE是个空宏,目的在于让moc识别. 使用Q_INVOKABLE来修饰成员函数,目的在于被修饰的成员函数能够被元对象系统所唤起. Q_INVOKABLE与QMe ...
- Linux I2C驱动分析(三)----i2c_dev驱动和应用层分析 【转】
本文转载自:http://blog.chinaunix.net/uid-21558711-id-3959287.html 分类: LINUX 原文地址:Linux I2C驱动分析(三)----i2c_ ...
- B5248 [2018多省省队联测]一双木棋 状压dp
这个题当时划水,得了二十分,现在来整一整. 这个题用状压来压缩边界线,然后通过记忆化搜索进行dp.我们可以观察到,其实每次转移,就是把一个1向左移一位.最后的状态设为0. 这其中还要有一个变量来记录谁 ...
- Prime Path(bfs)
http://poj.org/problem?id=3126 题意:给两个四位数n,m,将n变成m需要多少步,要求每次只能改变n的某一位数,即改变后的数与改变前的数只有一位不同,且每次改变后的数都是素 ...
- selenium3 + python - expected_conditions判断元素
expected_conditions 类 title_is: 判断当前页面的title是否完全等于(==)预期字符串,返回布尔值 title_contains : 判断当前页面的title是否包含预 ...
- Win7的虚拟Wi-Fi
前几天无意中发现,Win7的硬件驱动里有个叫Microsoft Virtual WiFi Miniport Adapter的东东,从网上查了一下,可以用来组建临时网络,共享Internet.一块无线网 ...
- BZOJ 1877 拆点费用流
思路: 呃 水题不解释 行么,, //By SiriusRen #include <queue> #include <cstdio> #include <cstring ...
- nodejs __dirname 与 process.cwd()的区别
var cwd = process.cwd(); console.log(cwd); console.log(__dirname); 1 2 3 cwd() 是当前执行node命令时候的文件夹地址 _ ...
- 各个数据库中,查询前n条记录的方法
SQL查询前10条的方法为: 1.select top X * from table_name --查询前X条记录,可以改成需要的数字,比如前10条. 2.select top X * from ...