HDU 2879 数论
HeHe
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)
Total Submission(s): 1463 Accepted Submission(s): 475
And furthermore, define HeHe[N]=He[1]*……*He[N]
Now here is the problem, write a program, output HeHe[N] modulo M for a given pair N, M.
Each test case contains two numbers N (1<=N<=10^7) and M (0<M<=10^9) separated by a space.
题意:
定义He[N]He[N]在[0,N−1][0,N−1]范围内有多少个数满足式子x2≡x (mod N)x2≡x (mod N)
求HeHe[N]=He[1]×……×He[N],He[n]是满足方程解的个数
由欧拉定理
这里φ(n)=2,即小于等于n的素数都满足φ(n)=2 (φ(n)是小于等于n且与n互质的数的个数)每一个素数对应两个满足方程的解
所有He[n]=满足方程解的个数=2num(num是小于n的所有质数的个数)
因为题目让求HeHe函数
HeHe函数是He函数的阶乘
故根据我们上面证明的结论
我们要求He[1],He[2],⋯He[N]He[1],He[2],⋯He[N]
这就用到了阶乘分解因子的方法了,我们知道要求N!中某个因子p有多少个,是不断加N/p直到0位置,而我们需要的只是1-N这些数中有多少个含有p因子,所以加一次N/p即可,然后枚举素因子p即可
#include<iostream>
#include<string.h>
#include<stdio.h>
#include<math.h>
#include<algorithm>
using namespace std;
#define ll long long
const int maxn=1e7+;
const int N=7e5+;
bool isprime[maxn];
ll prime[N],cnt; void init()//求小于n的所有素数
{
cnt = ;
memset(isprime,true,sizeof(isprime));
for(int i = ; i < maxn; i++)
{
if(isprime[i])
{
prime[cnt++] = i;
for(int j = i + i; j < maxn; j += i)
{
isprime[j] = false;
}
}
}
}
ll q_pow(ll a,ll b,ll mod)
{
ll ans = ;
while(b)
{
if(b & )
ans = ans * a % mod;
b >>= ;
a = a * a % mod;
}
return ans;
} int main()
{
init();
ll n,m,t;
scanf("%lld",&t);
while(t--)
{
ll num=;
scanf("%lld %lld",&n,&m);
for(int i=;prime[i]<=n&&i<cnt;i++)//i<cnt是为了防止数组越界,累加求1->n个数字中,所有素数的个数(包括重复)
{
num=num+n/prime[i];
}
printf("%lld\n",q_pow(,num,m)); }
return ;
}
HDU 2879 数论的更多相关文章
- 积性函数,线性筛入门 HDU - 2879
HDU - 2879HeHe 题意:He[N]为[0,N−1]范围内有多少个数满足式子x2≡x (mod N),求HeHe[N]=He[1]×……×He[N] 我是通过打表发现的he[x]=2k,k为 ...
- GCD and LCM HDU 4497 数论
GCD and LCM HDU 4497 数论 题意 给你三个数x,y,z的最大公约数G和最小公倍数L,问你三个数字一共有几种可能.注意123和321算两种情况. 解题思路 L代表LCM,G代表GCD ...
- HDU 4497 数论+组合数学
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4497 解题思路:将满足条件的一组x,z,y都除以G,得到x‘,y',z',满足条件gcd(x',y' ...
- hdu 4542 数论 + 约数个数相关 腾讯编程马拉松复赛
题目:http://acm.hdu.edu.cn/showproblem.php?pid=4542 小明系列故事--未知剩余系 Time Limit: 500/200 MS (Java/Others) ...
- hdu 4961 数论?
http://acm.hdu.edu.cn/showproblem.php?pid=4961 给定ai数组; 构造bi, k=max(j | 0<j<i,a j%ai=0), bi=ak; ...
- hdu 1664(数论+同余搜索+记录路径)
Different Digits Time Limit: 10000/4000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- hdu 3641 数论 二分求符合条件的最小值数学杂题
http://acm.hdu.edu.cn/showproblem.php?pid=3641 学到: 1.二分求符合条件的最小值 /*================================= ...
- hdu 4059 数论+高次方求和+容斥原理
http://acm.hdu.edu.cn/showproblem.php? pid=4059 现场赛中通过率挺高的一道题 可是容斥原理不怎么会.. 參考了http://blog.csdn.net/a ...
- HDU 4651 数论 partition 求自然数的拆分数
别人的解题报告: http://blog.csdn.net/zstu_zlj/article/details/9796087 我的代码: #include <cstdio> #define ...
随机推荐
- Linux mii-tool命令
一.简介 mii-tool 是一个用来查看,管理介质的网络接口的状态的工具. 二.选项 usage: mii-tool [-VvRrwl] [-A media,... | -F media] [int ...
- jquery extend 多个扩展方法
$.fn.extend({ SetDict: function (option) { var txtControl = $(this); if (!txtControl.hasClass(" ...
- MVC5应用程序生命周期lifecycle
- javascript总结3:javaScript的 Math 对象
Math 对象 Math 对象用于执行数学任务. Math 对象并不像 Date 和 String 那样是对象的类,因此没有构造函数 Math(). Math 常用的方法 var n1=1234; v ...
- portableDFS-可便携的分布式文件系统
PPT下载(因附件大小有限制,删除了PPT中的隐藏页,如需完整版本,请转到it168文库下载):portableDFS-可便携的分布式文件系统.ppt 完整版本请上这里下载:http://wenku. ...
- Java 线程不安全问题分析
当多个线程并发访问同一个资源对象时,可能会出现线程不安全的问题 public class Method implements Runnable { private static int num=50; ...
- 编写高质量代码改善C#程序的157个建议——建议7: 将0值作为枚举的默认值
建议7: 将0值作为枚举的默认值 允许使用的枚举类型有byte.sbyte.short.ushort.int.uint.long和ulong.应该始终将0值作为枚举类型的默认值.不过,这样做不是因为允 ...
- SQL之DCL
DCL(Data Control Language)数据库控制语言 授权,角色控制等GRANT 授权REVOKE 取消授权 1)授权命令 grant,语法格式(SQL语句不区分大小写):Grant ...
- javascript framework js常用框架
js常用框架 一.node.js 二.angularjs.js 三.react.js 四.webpack.js 五.flux.js 六.vue.js 七.bootstrap ...
- ubuntu14.04,安装Git(源代码管理工具)
在shell中执行:sudo apt-get install git-core