[数论-欧拉函数的应用]NEFU 1115
description
在高数课上老师给出了一个等式GCD(n-a,n)*GCD(n-b,n)=n^k;
已知,n,k,问同学们有多少组(a,b)满足这个等式。结果对10^9+7取模。
1<=a,b<=n
只需考虑k=1的情况。
设g= GCD(n-a,n)。
g*k1=n-a g*k2=n
k1与k2互质,且k1<k2。
选择一个身为n的因子g= GCD(n-a,n),有多少种a可以选择呢?也就是说有多少个k1可以满足上述条件。
这不就是欧拉函数吗,,哈哈!!!,也就是说a共有euler(n/g)种选择。
现在对于g1*g2=n,共有euler(g2)* euler (g1)种选择。
因为euler(n) = n(1-1/p1)(1-1/p2)……(1-1/pr),可以想到 euler(g2)* euler(g1)其中包括g1*g2,还有n的质因数,这些质因数有些被乘了两次。所以对于g1,g2,只需要找出他们的最大公约数再巴拉巴拉。。。。,一些细节要考虑啊。
#include <stdio.h> #include<cstring> using namespace std; const int MAXN=10000; int prime[MAXN+1]; void getPrime() { memset(prime,0,sizeof(prime)); for(int i=2; i<=MAXN; i++) { if(!prime[i]) prime[++prime[0]]=i; for(int j=1; j<=prime[0]&&prime[j]<=MAXN/i; j++) { prime[prime[j]*i]=1; if(i%prime[j]==0) break; } } } long long factor[100][2]; int fatCnt; int getFactors(long long x) { fatCnt=0; long long tmp=x; for(int i=1; prime[i]<=tmp/prime[i]; i++) { factor[fatCnt][1]=0; if(tmp%prime[i]==0) { factor[fatCnt][0]=prime[i]; while(tmp%prime[i]==0) { factor[fatCnt][1]++; tmp/=prime[i]; } fatCnt++; } } if(tmp!=1) { factor[fatCnt][0]=tmp; factor[fatCnt++][1]=1; } return fatCnt; } int n,k; long long euler[40001]; void getEuler() { memset(euler,0,sizeof(euler)); euler[1] = 1; for(int i = 2; i <= 40000; i++) if(!euler[i]) //i是素数 for(int j = i; j <= 40000; j += i) { if(!euler[j]) euler[j] = j; euler[j] = euler[j]/i*(i-1); } } int gcd(int a,int b) { if(a==0) return b; return gcd(b%a,a); } int main() { getPrime(); getEuler(); while(scanf("%d%d",&n,&k)!=EOF) { getFactors(n); long long ret = n; for(int i = 0; i < fatCnt; i++) { ret = ret/factor[i][0]*(factor[i][0]-1); } long long ans=(ret*2)%1000000007; if(k>2) puts("0"); else if(k==2) puts("1"); else if(k==1) { int i; for(i=2; i*i<n; i++) { if(n%i==0) { //printf("%d %d\n",i,n/i); //printf("%d %d\n",n/i,i); ans+=ret*euler[gcd(i,n/i)]/gcd(i,n/i)*2; if(ans>1000000007) ans%=1000000007; } } if(i*i==n) { if(n%i==0) { //printf("%d %d\n",i,n/i); ans+=ret*euler[gcd(i,n/i)]/gcd(i,n/i); if(ans>1000000007) ans%=1000000007; } } //ans++;ans%=1000000007; printf("%lld\n",ans); } } return 0; }
转载于:https://www.cnblogs.com/lastone/p/5262220.html
[数论-欧拉函数的应用]NEFU 1115相关推荐
- hdu1395 数论 欧拉函数
hdu1395 数论 欧拉函数 对于给出的每一个n 求最小正整数 x 满足 2^x mod n = 1 1.如果给出的n 是偶数或者 1 则一定无解 2.如果是奇数 首先根据欧拉定理 我们可知 p ...
- 第二十六章 数论——欧拉函数(详解与证明)
第二十六章 数论--欧拉函数(详解与证明) 欧拉函数 1.互质 2.欧拉函数的定义 3.欧拉函数的公式 4.欧拉函数的证明 5.欧拉函数的使用 (1)问题一: 思路 代码 (2)问题二: 思路 cas ...
- CCPC-Wannafly Winter Camp Day3 (Div2, onsite) F 小清新数论 欧拉函数的利用 莫比乌斯反演 杜教筛
F - 小清新数论 做法一:欧拉函数 #include<stdio.h> #include<bits/stdc++.h> using namespace std; #defin ...
- 费马定理中值定理_数论-欧拉函数、欧拉定理
欧拉函数 积性函数 满足 ( 互质) 定义 对于正整数 ,欧拉函数是小于等于 的所有数中与 互质的数的 个数. 欧拉函数是积性函数(这个证明不是很显然,这个链接里面有很多种证明方法) 记作: 公式 , ...
- 中高级数论 [欧拉函数线性筛,二次剩余]
欧拉函数线性筛 对于素数ppp, φ(p∗i)={p−1i=1p∗φ(i)p∣i(p−1)∗φ(i)p∤i\varphi (p*i)= \begin{cases} p-1& i=1\\ p*\ ...
- nssl1232-函数【数论,欧拉函数,莫比乌斯反演】
正题 题目大意 ∑d∣nf(d)=n\sum_{d|n}f(d)=nd∣n∑f(d)=n 对于n个aia_iai 求 ∑i=1nf(ai)\sum_{i=1}^nf(a_i)i=1∑nf(ai ...
- 数论 —— 欧拉函数
[定义] 对正整数 n,欧拉函数是小于等于 n 的数中与 n 互质的数的个数,记作: 例如:,因为 1.3.5.7 均与 8 互质. [性质] 1)若 n 为一素数 p,则: 2)若 n 为一素数 p ...
- [HAOI2012]外星人——数论欧拉函数
题目描述 艾利欧在她的被子上发现了一个数字 NNN,他觉得只要找出最小的 xxx 使得 φx(N)=1\varphi^x(N)=1φx(N)=1 根据这个 xxx 她就能找到曾经绑架她的外星人的线索了 ...
- P2303 [SDOI2012] Longge(数论/欧拉函数)
P2303 [SDOI2012] Longge 一道看似非常基础的数论题,但是蕴含了非常多的知识,求解 ∑i=1ngcd(i,n)\sum_{i=1}^ngcd(i,n) i=1∑ngcd(i,n) ...
最新文章
- 未老先呆,这锅熬夜真的要背:生物钟影响阿尔茨海默症的机制被发现
- 计算机处理器采用多核,电脑的CPU的多核很有用吗?
- 【STM32】FreeRTOS中断示例
- 程序员搞笑故事:给女儿织的辫子 ​​​​,你知道是什么算法吗?
- java c++ python哪个好_程序员学java好还是python语言好 c++又如何
- java开源服务框架_Java框架服务
- CXF生成本地ws调用代码测试webservice
- 零起点英语_【德国零起点】05—变元音字母
- matplotlib交互模式与pycharm单独Figure设置
- FLEX 2.01 全套下载!
- CentOS 7完全卸载MySQL
- OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x000001faf3e50000
- 用python实现单词本功能
- 上海智能交通建设现状与未来发展要点
- Python3爬取搜狗微信公众号
- 集美福利!陈睿当时加入B站的故事分享
- tig--颠覆 Git 命令使用体验的神器
- 2016年全国高中数学联赛加试T3解答
- 超级电容锂电池混合储能Simulink仿真
- 解决Cannot create PoolableConnectionFactory (Access denied for user 'xxx'@'xxx.xxx.xx.xxx' (using pas
热门文章
- 表单验证之validform.js使用方法
- 给定一个0-1串,请找到一个尽可能长的子串,其中包含的0与1的个数相等。
- maven配置篇之pom.xml
- (step3.3) hdu 1059(Dividing——多重背包)
- 超外差和超再生模块有何区别?
- Exception Handling Application Block (5)详细解
- Redis之高级特性
- python安装dlib要cmake,如何使用cmake解决dlib错误?
- (44)FPGA面试题CMOS和TTL电路区别
- (34)FPGA面试技能提升篇(高速SERDES)