UVA 11440 - Help Tomisu(欧拉函数)

UVA 11440 - Help Tomisu

题目链接

题意:给定n和m,求[2,n!]中,所有质因子个数都大于m的个数

思路:?(m!)表示小于m!并与m!互质的个数,而与m!互质的个数,他的质因子肯定不包含1-m,因此就是满足条件的。然后对于这题而言,则是要求n!中,不与m!互质的个数,答案取模100000007

那么先看一个证明:

求kn中与n互质的个数,答案为k?(n)。

?(n)表示1-n中与n互质的个数,那么由此考虑[n
+ 1, 2n], [2n + 1, 3n]...这每个区间中的每个数字都等于1-n中数字加上kn,对于原来就与n不互质的个数,加上n仍会有一个质因子重复,所以仍然不行,那么对于原来互质的数x,gcd(x, n) = 1,那么可知gcd(x + kn, n) = 1,仍然是互质的,所以每隔n的区间与n互质的个数是相同的,所以答案k?(n)

所以对于这道题目,答案就变成了n!/m!?(m!),那么问题只剩下如何求?(m!)。

已知?(n)求法为n?(1?1/p1)?(1?1/p2)....(1?1/pn)
(p为n的质因子),因此对于m!而言,分子为m!,分母为1
- m所有质数的(1?1/p)之乘积

到这里答案就可以求了,把m!消掉,得到n!/∏(1?1/pi)mod1000000007,先预处理那些表,每次去计算即可

代码:

#include <cstdio>
#include <cstring>

const long long N = 10000005;
const long long mod = 100000007;

long long ispri[N], fac[N], phi[N];

long long exgcd(long long a, long long b, long long &x, long long &y) {
    if (!b) {x = 1; y = 0; return a;}
    long long d = exgcd(b, a % b, y, x);
    y -= a / b * x;
    return d;
}

long long inv(long long a, long long n) {
    long long x, y;
    exgcd(a, n, x, y);
    return (x + n) % n;
}

void get_table() {
    fac[0] = fac[1] = 1; phi[0] = phi[1] = 1;
    for (long long i = 2; i < N; i++) {
	fac[i] = (fac[i - 1] * i) % mod;
	if (ispri[i]) {
	    phi[i] = phi[i - 1];
	    continue;
	}
	phi[i] = phi[i - 1] * (i - 1) % mod * inv(i, mod) % mod;
	for (long long j = i * i; j < N; j += i)
	    ispri[j] = 1;
    }
}

int n, m;

int main() {
    get_table();
    while (~scanf("%d%d", &n, &m) && n) {
	printf("%lld\n", ((fac[n] * phi[m] - 1) % mod + mod) % mod);
    }
    return 0;
}

UVA 11440 - Help Tomisu(欧拉函数),布布扣,bubuko.com

时间: 2024-12-31 06:30:14

UVA 11440 - Help Tomisu(欧拉函数)的相关文章

Help Tomisu UVA - 11440 难推导+欧拉函数,给定正整数N和M, 统计2和N!之间有多少个整数x满足,x的所有素因子都大于M (2&lt;=N&lt;=1e7, 1&lt;=M&lt;=N, N-M&lt;=1E5) 输出答案除以1e8+7的余数。

/** 题目:Help Tomisu UVA - 11440 链接:https://vjudge.net/problem/UVA-11440 题意:给定正整数N和M, 统计2和N!之间有多少个整数x满足,x的所有素因子都大于M (2<=N<=1e7, 1<=M<=N, N-M<=1E5) 输出答案除以1e8+7的余数. 思路: lrjP338 由于x的所有素因子都>M:那么x与M!互质. 根据最大公约数的性质,对于x>y,x与y互质,那么x%y与y也互质. 由于N

uva 11440 - Help Tomisu(欧拉功能)

题目链接:uva 11440 - Help Tomisu 题目大意:给定n和m,求从2~n.中的数x.要求x的质因子均大于m.问说x有多少个.答案模上1e9+7. 解题思路: (1)n!=k?m!(n≥m) (2) 假设有gcd(x,T)=1,那么gcd(x+T,T)=gcd(x,T)=1 题目要求说x的质因子必需要大于m,也就是说x不能包括2~m的因子,那么gcd(x,m!)=1,于是我们求出?(m!),小于m! 而且满足gcd(x,m!)=1的个数. 那么依据(2)可得从[m!+1, 2*m

uva 11317 - GCD+LCM(欧拉函数+log)

题目链接:uva 11317 - GCD+LCM 题目大意:给定n,求出1~n里面两两的最大公约的积GCD和最小公倍数的积LCM,在10100进制下的位数. 解题思路:在n的情况下,对于最大公约数为i的情况又phi[n/i]次.求LCM就用两两乘积除以GCD即可. #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> using namespace std; ty

POJ 2407 Relatives &amp;&amp; UVA 10299 Relatives(欧拉函数)

[题目链接]:click here~~ [题目大意]:欧拉函数:求少于或等于n的数中与n互素的数的个数:n <= 1,000,000,000. [思路]:裸欧拉函数,注意特判n==1的情况,n==1的情况下,应该输出0,poj依然判断1也可以过,但是老牌ojUVA必须是0才过,注意一下. 代码: #include <stdio.h> #include <string.h> #include <iostream> #include <algorithm>

UVa 11440 (欧拉函数) Help Tomisu

题意: 给出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] =

UVA 10837 - A Research Problem(欧拉函数)

UVA 10837 - A Research Problem 题目链接 题意:给定phi(n),求最小满足的最小的n 思路:phi(n)=pk11(p1?1)?pk22(p2?1)?pk33(p3?1)....(p为质数),因此对于给定phi(n),先把满足条件phi(n)%(p?1)=0的素数全找出来,在这些素数基础上进行暴力搜索,枚举哪些素数用与不用,求出最小值.这样做看似时间复杂度很高,但是实际上,由于每次多选一个素数之后对于值是呈指数上升的,所以实际组合出来的情况并不会太多,因此是可行的

uva 10837 - A Research Problem(欧拉函数+暴力)

题目链接:uva 10837 - A Research Problem 题目大意:给定一个phin,要求一个最小的n,欧拉函数n等于phin 解题思路:欧拉函数性质有,p为素数的话有phip=p?1;如果p和q互质的话有phip?q=phip?phiq 然后根据这样的性质,n=pk11(p1?1)?pk22(p2?1)???pkii(pi?1),将所有的pi处理出来,暴力搜索维护最小值,虽然看上去复杂度非常高,但是因为对于垒乘来说,增长非常快,所以搜索范围大大被缩小了. #include <cs

UVA 12493 Stars (欧拉函数--求1~n与n互质的个数)

https://uva.onlinejudge.org/index.phpoption=com_onlinejudge&Itemid=8&category=279&page=show_problem&problem=3937 题目:http://acm.bnu.edu.cn/v3/external/124/12493.pdf 大致题意:圆上有偶数n个点,每间隔m个点连起来,最后可以把所有点串联起来就合法.问有多少个m可以完成串联,串联后形状相同的算重复 n <2^31

UVA 11426 - GCD - Extreme (II) 欧拉函数-数学

Given the value of N, you will have to ?nd the value of G. The de?nition of G is given below:G =i<N∑i=1j∑≤Nj=i+1GCD(i, j)Here GCD(i, j) means the greatest common divisor of integer i and integer j.For those who have trouble understanding summation no