题意:

给出N和M,统计区间x ∈ [2, N!],x满足所有素因子都大于M的x的个数。

分析:

首先将问题转化一下,所有素因子都大于M 等价于 这个数与M!互素

对于k大于M!,k与M!互素等价于 k % M! 与 M!互素

所以我们可以求出φ(M!)(φ为欧拉函数) 然后乘以N! / M!,最后答案再减一(因为是从2开始统计的)

欧拉函数的公式为a

phifac[n] = φ(n!),我们递推求phifac

当n为合数时,n!和(n-1)!的素因数的集合是一样的,所以phifac[n] = n * phifac[n-1]

当n为素数是,n!中多了一个素因子n,公式中也多了一项(1 - 1/n),所以phifac[n] = n * (n-1) / n * phifac[n-1] = (n-1) * phifac[n-1]

 #include <cstdio>
#include <cmath> const int maxn = + ;
const int MOD = ;
int phifac[maxn];
bool vis[maxn]; void sieve(int n)
{
int m = sqrt(n + 0.5);
for(int i = ; i <= m; ++i) if(!vis[i])
for(int j = i*i; j <= n; j += i)
vis[j] = true;
} int main()
{
sieve();
phifac[] = phifac[] = ;
for(int i = ; i <= ; ++i)
phifac[i] = (long long) phifac[i-] * (vis[i] ? i : i-) % MOD; int n, m;
while(scanf("%d%d", &n, &m) == )
{
if(n == && m == ) break;
int ans = phifac[m];
for(int i = m+; i <= n; ++i) ans = (long long)ans * i % MOD;
printf("%d\n", (ans-+MOD)%MOD);
} return ;
}

代码君

UVa 11440 (欧拉函数) Help Tomisu的更多相关文章

  1. UVa 11426 (欧拉函数 GCD之和) GCD - Extreme (II)

    题意: 求sum{gcd(i, j) | 1 ≤ i < j ≤ n} 分析: 有这样一个很有用的结论:gcd(x, n) = i的充要条件是gcd(x/i, n/i) = 1,因此满足条件的x ...

  2. UVa 10837 (欧拉函数 搜索) A Research Problem

    发现自己搜索真的很弱,也许做题太少了吧.代码大部分是参考别人的,=_=|| 题意: 给出一个phi(n),求最小的n 分析: 回顾一下欧拉函数的公式:,注意这里的Pi是互不相同的素数,所以后面搜索的时 ...

  3. UVA 10820 欧拉函数模板题

    这道题就是一道简单的欧拉函数模板题,需要注意的是,当(1,1)时只有一个,其他的都有一对.应该对欧拉函数做预处理,显然不会超时. #include<iostream> #include&l ...

  4. UVA 11426 (欧拉函数&&递推)

    题意:给你一个数N,求N以内和N的最大公约数的和 解题思路: 一开始直接想暴力做,4000000的数据量肯定超时.之后学习了一些新的操作. 题目中所要我们求的是N内gcd之和,设s[n]=s[n-1] ...

  5. UVA - 11426 欧拉函数(欧拉函数表)

    题意: 给一个数 N ,求 N 范围内所有任意两个数的最大公约数的和. 思路: f 数组存的是第 n 项的 1~n-1 与 n 的gcd的和,sum数组存的是 f 数组的前缀和. sum[n]=f[1 ...

  6. Trees in a Wood. UVA 10214 欧拉函数或者容斥定理 给定a,b求 |x|<=a, |y|<=b这个范围内的所有整点不包括原点都种一棵树。求出你站在原点向四周看到的树的数量/总的树的数量的值。

    /** 题目:Trees in a Wood. UVA 10214 链接:https://vjudge.net/problem/UVA-10214 题意:给定a,b求 |x|<=a, |y|&l ...

  7. GCD - Extreme (II) UVA - 11426 欧拉函数_数学推导

    Code: #include<cstdio> using namespace std; const int maxn=4000005; const int R=4000002; const ...

  8. 紫书 习题 10-18 UVa 10837 (欧拉函数变形)

    这道题很巧妙,要把式子变一下 phi(n) = n * (1 - 1 / p1) * (1 - 1 / p2)--(1 - 1 / pr) = n * ((p1-1) / p1) * ((p1-2) ...

  9. Trees in a Wood UVA - 10214 欧拉函数模板

    太坑惹,,,没用longlong各种WA #include <iostream> #include <string.h> #include <cstdio> #in ...

随机推荐

  1. PHP获取当前时间的毫秒数(yyyyMMddHHmmssSSS)

    1 second = 1000 millisecond = 1000,000 microsecond = 1000,000,000 nanosecond php的毫秒是没有默认函数的,但提供了一个mi ...

  2. Linux恢复删除文件

    一.介绍extundelete 1.extundelete的文件恢复工具,该工具最给力的一点就是支持ext3/ext4双格式分区恢复. 2. 在实际线上恢复过程中,切勿将extundelete安装到你 ...

  3. DB2分区表删除和添加分区

    1.数据库版本 2.具体procedure DROP PROCEDURE DB2USER.TOOLS_PARTITION_TABLE_SHOW (VARCHAR ()); )) /********** ...

  4. javac mac 终端乱码

    java和javac在简体中文的Mac OSX的终端(Terminal.app)环境下,默认是以GBK编码的中文输出各种诸如语法错误,数组访问越界之类的信息.但是,Mac的终端的默认编码是UTF-8, ...

  5. Java 类和对象

    主要参考文献:王映龙<Java程序设计> 一:类的语法 [修饰符]class<类名>[extends父类名][implements接口列表]{ //类体} 1:修饰符 可选值为 ...

  6. fedora 安装chrome

    1. 下载chrome的rpm安装包 2. 安装lsb:   sudo yum install redhat-lsb.x86_64 3. rpm -i google-chrome-{xxxxx}.rp ...

  7. oracle游标小试

    有时候需要大面积的修改数据,这个时候用循环语句效率不高.而临时表又不能满足点对点修改的时候,游标似一种不错的选择(PS:好像游标也是为循环而生的吧) 现在有两张表 t1(ryid number,nam ...

  8. ubuntu find方法

    通用格式:find pathname -options [-print -exec -ok]例子:find / -name filename 再根目录里面搜索文件名为filename的文件find / ...

  9. WebApi2 jsonp跨域问题

    一:故事背景     以前在写WebApi2的时候,一直是用作前后端分离(WebApi2 +angularjs),可是最近自己在给WebApp写接口的时候遇到了很多坑,总结一下就是跨域问题.而跨域问题 ...

  10. WPF容器控件

    WPF有五种容器控件,分别为Grid,Canvas,StackPanel,WrapPanel,DockPanel. Grid: 1.Height=”60”:不加“星号”表示固定的高度 2.Height ...