题目描述

   BG 有一块细长的蛋糕,长度为 n。
  有一些人要来 BG 家里吃蛋糕, BG 把蛋糕切成了若干块(整数长度),然后分给这些人。
  为了公平,每个人得到的蛋糕长度和必须相等,且必须是连续的一段。
  但是, BG 并不知道要有多少人来。 他只知道, 来的人数为n的约数,且小于n。

  显然把蛋糕平均分成 n 块一定能满足要求。但是, BG 想要分出的块数尽量少。现在 BG
  想知道,他要把蛋糕分成至少多少块,才能使得不管多少人来都能满足要求。

输入格式

  输入文件名为 cake.in。
  输入共一个整数 n,表示蛋糕的长度。

输出格式

  输出文件名为 cake.out。
  输出共一个整数, 表示分出的最少块数。

样例输入1

  6

样例输出1

  4

样例输入2

  15

样例输出2

  7

题目分析

  拿15的分割为例子:

    

   可以看出切割处均为15的约数(在15处会出现重叠),

  若设 f(x) 表示15中x的倍数有几个,则答案应为

  $$ans = f(3) + f(5) - f(15) $$

  其实就是n - 小于n且与n互质的数---->欧拉函数

  欧拉函数$\phi$(n) : $\phi$(n) 表示[1, n]中与 n 互质的整数的个数。

  主要公式: $$phi(n) = n · \prod_{p \in P} \frac{p - 1}{p}$$

  欧拉函数有两种求法:

  • 多个数的欧拉函数
void sieve() {
phi[] = ;
for (int i = ; i < N; ++i) {
if (!pr[i])
prime[pn++] = pr[i] = i, phi[i] = i - ;
for (int j = ; j < pn; ++j) {
int k = i * prime[j];
if (k >= N) break;
pr[k] = prime[j];
if (i % prime[j] == ) {
phi[k] = phi[i] * prime[j];
break;
} else
phi[k] = phi[i] * (prime[j] - );
}
}
}
  • 求一个数的欧拉函数
    p = ans = n;
for(int i = ; i * i <= p; i++){
if(p % i == ) ans = ans / i * (i - ) ;
while(p % i == ) p /= i;
}
if(p != )
ans = ans / p *(p - ) ;

  本题只需求一个值。

CODE

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<string>
#include<cmath>
#include<algorithm>
using namespace std; int phi;
int ans;
int n, p; int main(){
cin>>n;
p = ans = n;
for(int i = ; i * i <= p; i++){
if(p % i == ) ans = ans / i * (i - ) ;
while(p % i == ) p /= i;
}
if(p != )
ans = ans / p *(p - ) ;
cout<<n - ans;
return ;
}

NOIP模拟:切蛋糕(数学欧拉函数)的更多相关文章

  1. 【BZOJ4173】数学 欧拉函数神题

    [BZOJ4173]数学 Description Input 输入文件的第一行输入两个正整数 . Output 如题 Sample Input 5 6 Sample Output 240 HINT N ...

  2. 【BZOJ-4173】数学 欧拉函数 + 关于余数的变换

    4173: 数学 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 306  Solved: 163[Submit][Status][Discuss] D ...

  3. [bzoj]2705: [SDOI2012]Longge的问题[数论][数学][欧拉函数][gcd]

    [bzoj]P2705 OR [luogu]P2303 Longge的问题 Description Longge的数学成绩非常好,并且他非常乐于挑战高难度的数学问题.现在问题来了:给定一个整数N,你需 ...

  4. 数学(欧拉函数):UVAOJ 11426 GCD - Extreme (II)

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAB4AAAAQ4CAIAAABnsVYUAAAgAElEQVR4nOzdPW7zvII/bG1gCi9gKq ...

  5. bzoj 2705 数学 欧拉函数

    首先因为N很大,我们几乎不能筛任何东西 那么考虑设s(p)为 gcd(i,n)=p 的个数,显然p|n的时候才有意义 因为i与n的gcd肯定是n的因数,所以那么可得ans=Σ(p*s(p)) 那么对于 ...

  6. Luogu P2158 [SDOI2008]仪仗队【数学/欧拉函数】by cellur925

    题目描述 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是否整齐(如下图 ...

  7. Acwing-201-可见的点(数学, 欧拉函数)

    链接: https://www.acwing.com/problem/content/description/203/ 题意: 在一个平面直角坐标系的第一象限内,如果一个点(x,y)与原点(0,0)的 ...

  8. UVaLive 7362 Farey (数学,欧拉函数)

    题意:给定一个数 n,问你0<= a <=n, 0 <= b <= n,有多少个不同的最简分数. 析:这是一个欧拉函数题,由于当时背不过模板,又不让看书,我就暴力了一下,竟然A ...

  9. 数学之欧拉函数 &几道poj欧拉题

    欧拉函数总结+证明 欧拉函数总结2 POJ 1284 原根 #include<iostream> #include<cstdio> #include<cstring> ...

随机推荐

  1. SDWebImage源码阅读-第一篇

    一 题外话 之前写过一篇最新版SDWebImage的使用,也简单的介绍了一下原理.这两天正梳理自己的知识网络,觉得有必要再阅读一下源码,一是看具体实现,二是学习一下优秀开源代码的代码风格,比如接口设计 ...

  2. Dede CMS如何在文章中增加“附件下载”操作说明

    1.进入后台--在"附件管理"中选择"上传新文件" 2.在"说明标题"输入要上传文件的名字,并在下面浏览找到要上传的文件,保存. 3.在&q ...

  3. 新增article注意事项

    默认情况下在日志复制中如果新增加Article那么需要产生一个包含所有Article的Snapshot.由于产生Snapshot会加锁,同时会产生IO操作,所以对于大的数据库性能影响是很大的. 可以通 ...

  4. php实现ppt转图片,php调用com组件问题

    PHP 调用com组件将ppt转为图片. 需要在php.ini中开启 extension=php_com_dotnet.dllcom.allow_dcom = true   测试代码如下:   < ...

  5. Linux上的防病毒软件ClamAV

    Clam AntiVirus(ClamAV)是免费而且开放源代码的防毒软件,软件与病毒码的更新皆由社群免费发布.目前ClamAV主要是使用在由Linux.FreeBSD等Unix-like系统架设的邮 ...

  6. git 知识点汇总

    git commit git commit 命令执行后, git 主要执行了三个操作: 为每一个文件生成一个快照 每一个文件其实是真的数据, 所以 git 会把整个文件内容转成二进制, 然后经过压缩直 ...

  7. jquery.qrcode.min.js(支持中文转化二维码)

    详情请看:http://www.ncloud.hk/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/jqueryqrcodeminjs/ 今天还是要讲一下关于二维码的知识,前 ...

  8. 【翻译Autofac的帮助文档】1.入门指南

    [写在前面]尝试做完一件工作之外自我觉得有意义的一件事,那就从翻译Autofac的帮助文档吧. 入门指南 将Autofac集成你的应用程序的步骤通常很简单,一般是: 时刻以IOC(控制反转)的思想来规 ...

  9. [USACO07NOV]电话线Telephone Wire

    [USACO07NOV]电话线Telephone Wire 时间限制: 1 Sec  内存限制: 128 MB 题目描述 电信公司要更换某个城市的网线.新网线架设在原有的 N(2 <= N &l ...

  10. PHP完成一个日历

    今天我们就用php中的数组合date 做一个日历. 先让我们回顾一下PHP里面的date . 1.时间戳:表示从计算机元年/UNIX纪年(0时区 1970/1/1 00:00:00)到当前事件的秒数. ...