题目描述:

题目大意:一个竹竿长度为p,它的score值就是比p长度小且与且与p互质的数字总数,比如9有1,2,4,5,7,8这六个数那它的score就是6。给你T组数据,每组n个学生,每个学生都有一个幸运数字,求出要求买n个竹子每个竹子的score都要大于或等于该学生的幸运数字,每个竹竿长度就是花费,求最小花费。

首先弄清欧拉函数的定义,详见:https://baike.baidu.com/item/%E6%AC%A7%E6%8B%89%E5%87%BD%E6%95%B0/1944850?fr=aladdin

函数内容
通式:

 
其中p1, p2……pn为x的所有质因数,x是不为0的整数。
φ(1)=1(和1互质的数(小于等于1)就是1本身)。
 
欧拉函数是积性函数——若m,n互质,

 
特殊性质:当n为质数时,

  

, 证明与上述类似。

若n为质数则

 
 
如:
ψ(10)=10×(1-1/2)×(1-1/5)=4;
ψ(30)=30×(1-1/2)×(1-1/3)×(1-1/5)=8;
ψ(49)=49×(1-1/7)=  =42。 

利用欧拉函数和它本身不同质因数的关系,用筛选计算出某个范围内所有数的欧拉函数值。

  1. /*
  2. 特性 :
  3. 1.若a为质数,phi[a]=a-1;
  4. 2.若a为质数,b mod a=0,phi[a*b]=phi[b]*a
  5. 3.若a,b互质,phi[a*b]=phi[a]*phi[b](当a为质数时,if b mod a!=0 ,phi[a*b]=phi[a]*phi[b])
  6. */
  7. int m[n],phi[n],p[n],nump;
  8. //m[i]标记i是否为素数,0为素数,1不为素数;p是存放素数的数组;nump是当前素数个数;phi[i]为欧拉函数
  9. int make()
  10. {
  11. phi[1]=1;
  12. for (int i=2;i<=n;i++)
  13. {
  14. if (!m[i])//i为素数
  15. {
  16. p[++nump]=i;//将i加入素数数组p中
  17. phi[i]=i-1;//因为i是素数,由特性得知
  18. }
  19. for (int j=1;j<=nump&&p[j]*i<n;j++) //用当前已的到的素数数组p筛,筛去p[j]*i
  20. {
  21. m[p[j]*i]=1;//可以确定i*p[j]不是素数
  22. if (i%p[j]==0) //看p[j]是否是i的约数,因为素数p[j],等于判断i和p[j]是否互质
  23. {
  24. phi[p[j]*i]=phi[i]*p[j]; //特性2
  25. break;
  26. }
  27. else phi[p[j]*i]=phi[i]*(p[j]-1); //互质,特性3其,p[j]-1就是phi[p[j]]
  28. }
  29. }
  30. }

现用另一种思路求任意一个数N,求出ψ(N),详见转载博客:https://blog.csdn.net/leolin_/article/details/6642096

代码实现:

  1. #include<stdio.h> //欧拉之实现
  2. int ef(int n)
  3. {
  4. int cnt=n;
  5. int i;
  6. for(i=;i<=n;i++)
  7. if(n%i==)
  8. {
  9. cnt - =cnt/i; // m-m/p
  10. while(n%i==)
  11. n/=i;
  12. }
  13. return cnt;
  14. }
  15. int main()
  16. {
  17. int n;int m;
  18. int count;
  19. while(scanf("%d",&m)!=EOF)
  20. {
  21.  
  22. while(m--){
  23. scanf("%d",&n);
  24. count=ef(n);
  25. printf("%d\n",count);}
  26. }
  27. return ;
  28. }

看完上面的内容,我们就知道一根长度为p的竹竿它的score其实就是欧拉函数值φ(p)。又因为一个素数p的φ(p)=p-1,所以我们只需要从x+1(x是幸运数字)开始找第一个出现的素数,那就是最小花费。

代码实现:

  1. #include<iostream>
  2. using namespace std;
  3. typedef long long ll;
  4. const int N=1e7+;
  5.  
  6. bool prime[N];
  7.  
  8. void is_prime(){
  9. for(int i=;i<N;i++){
  10. prime[i]=true;
  11. }
  12. for(int i=;i*i<N;i++){
  13. if(prime[i]){
  14. for(int j=i*i;j<=N;j+=i){
  15. prime[j]=false;
  16. }
  17. }
  18. }
  19. }
  20.  
  21. int main(){
  22. is_prime();
  23. int t,n;
  24. cin>>t;
  25. for(int i=;i<=t;i++){
  26. cin>>n;
  27. ll sum=;
  28. for(int j=;j<=n;j++){
  29. int x;
  30. cin>>x;
  31. for(int k=x+;;k++){
  32. if(prime[k]){
  33. sum+=k;
  34. break;
  35. }
  36. }
  37. }
  38. cout<<"Case "<<i<<": "<<sum<<" Xukha"<<endl;
  39. }
  40. }

Bi-shoe and Phi-shoe (欧拉函数)的更多相关文章

  1. FZU 1759 欧拉函数 降幂公式

    Description   Given A,B,C, You should quickly calculate the result of A^B mod C. (1<=A,C<=1000 ...

  2. poj3696 快速幂的优化+欧拉函数+gcd的优化+互质

    这题满满的黑科技orz 题意:给出L,要求求出最小的全部由8组成的数(eg: 8,88,888,8888,88888,.......),且这个数是L的倍数 sol:全部由8组成的数可以这样表示:((1 ...

  3. HDU 4483 Lattice triangle(欧拉函数)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4483 题意:给出一个(n+1)*(n+1)的格子.在这个格子中存在多少个三角形? 思路:反着想,所有情 ...

  4. 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 ...

  5. 【欧拉函数】【HDU1286】 找新朋友

    找新朋友 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  6. HDU 1695 GCD(欧拉函数+容斥原理)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1695 题意:x位于区间[a, b],y位于区间[c, d],求满足GCD(x, y) = k的(x, ...

  7. SPOJ 5152 Brute-force Algorithm EXTREME && HDU 3221 Brute-force Algorithm 快速幂,快速求斐波那契数列,欧拉函数,同余 难度:1

    5152. Brute-force Algorithm EXTREME Problem code: BFALG Please click here to download a PDF version ...

  8. uva 11426 GCD - Extreme (II) (欧拉函数打表)

    题意:给一个N,和公式 求G(N). 分析:设F(N)= gcd(1,N)+gcd(2,N)+...gcd(N-1,N).则 G(N ) = G(N-1) + F(N). 设满足gcd(x,N) 值为 ...

  9. [NOI2010][bzoj2005] 能量采集 [欧拉函数+分块前缀和优化]

    题面: 传送门 思路: 稍微转化一下,可以发现,每个植物到原点连线上植物的数量,等于gcd(x,y)-1,其中xy是植物的横纵坐标 那么我们实际上就是要求2*sigma(gcd(x,y))-n*m了 ...

  10. XMU 1615 刘备闯三国之三顾茅庐(三) 【欧拉函数+快速幂+欧拉定理】

    1615: 刘备闯三国之三顾茅庐(三) Time Limit: 1000 MS  Memory Limit: 128 MBSubmit: 45  Solved: 8[Submit][Status][W ...

随机推荐

  1. RHCE认证考前辅导

    一一:Linux认证题库详细说明 注意事项 (1) RHCSA上午2.5小时,RHCE下午3.5小时,考生需对题目非常熟练. (2) 5样东西必带(身份证.1支黑色水笔.常用邮箱.姓名拼音.聪明的脑袋 ...

  2. Confluence 6 数据模型

    本文档提供了 Confluence 的数据结构视图(schema )和数据模型概念上的的概述. 备注: Hibernate 的映射文件是针对 Confluence 数据模型的直接描述.在系统中的 Co ...

  3. ionic3 更新打开apk android 8.0报错

    项目中安卓强制更新,当文件下载完.在android 8.0中不能打开apk包. 引入插件报一下错误 import { FileOpener } from '@ionic-native/file-ope ...

  4. python并发编程之多进程1-----------互斥锁与进程间的通信

    一.互斥锁 进程之间数据隔离,但是共享一套文件系统,因而可以通过文件来实现进程直接的通信,但问题是必须自己加锁处理. 注意:加锁的目的是为了保证多个进程修改同一块数据时,同一时间只能有一个修改,即串行 ...

  5. sql查询条件为空的另类写法o( ̄▽ ̄)d

    简单描述:今天看老大提交的代码,发现了一个有意思的事情,一条sql中判断条件是空,老大的写法,让我眼前一亮.直接上代码 代码: <select id="getxxxs" re ...

  6. kali linux revealed mastering the penetration testing distribution

    1.本博客记载的是这本书的学习笔记,还有出现的一些不懂的单词 我也将会记载这篇博客中.记载顺序是按照本书的章节顺序来记载的.最喜欢本书中的一句   you havae no idea how good ...

  7. MVC开发中的常见错误-02-在应用程序配置文件中找不到名为“OAEntities”的连接字符串。

    在应用程序配置文件中找不到名为“OAEntities”的连接字符串. 分析原因:由于Model类是数据库实体模型,通过从数据库中引用的方式添加实体,所以会自动产生一个数据库连接字符串,而程序运行到此, ...

  8. python之字符编码

    1.以什么编码存的就以什么编码取出; 内存固定使用unicode编码; 我们可以控制的编码是往硬盘存放或者基于网络传输选择编码. 2.数据是最先产生于内存中,是unicode格式,要想传输需要转成by ...

  9. 20165323 预备作业3 Linux安装及学习

    一.Linux安装 首先我按照老师所给的步骤下载了VirtualBox 5.2.6和Ubuntu 16.04.3.有流程下载很简单,但是在下载的过程中还是出现了一些问题. 1.VirtualBox 只 ...

  10. webpack学习笔记--整体配置结构

    之前的章节分别讲述了每个配置项的具体含义,但没有描述它们所处的位置和数据结构,下面通过一份代码来描述清楚: const path = require('path'); module.exports = ...