NOIP模拟:切蛋糕(数学欧拉函数)
题目描述
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模拟:切蛋糕(数学欧拉函数)的更多相关文章
- 【BZOJ4173】数学 欧拉函数神题
[BZOJ4173]数学 Description Input 输入文件的第一行输入两个正整数 . Output 如题 Sample Input 5 6 Sample Output 240 HINT N ...
- 【BZOJ-4173】数学 欧拉函数 + 关于余数的变换
4173: 数学 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 306 Solved: 163[Submit][Status][Discuss] D ...
- [bzoj]2705: [SDOI2012]Longge的问题[数论][数学][欧拉函数][gcd]
[bzoj]P2705 OR [luogu]P2303 Longge的问题 Description Longge的数学成绩非常好,并且他非常乐于挑战高难度的数学问题.现在问题来了:给定一个整数N,你需 ...
- 数学(欧拉函数):UVAOJ 11426 GCD - Extreme (II)
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAB4AAAAQ4CAIAAABnsVYUAAAgAElEQVR4nOzdPW7zvII/bG1gCi9gKq ...
- bzoj 2705 数学 欧拉函数
首先因为N很大,我们几乎不能筛任何东西 那么考虑设s(p)为 gcd(i,n)=p 的个数,显然p|n的时候才有意义 因为i与n的gcd肯定是n的因数,所以那么可得ans=Σ(p*s(p)) 那么对于 ...
- Luogu P2158 [SDOI2008]仪仗队【数学/欧拉函数】by cellur925
题目描述 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是否整齐(如下图 ...
- Acwing-201-可见的点(数学, 欧拉函数)
链接: https://www.acwing.com/problem/content/description/203/ 题意: 在一个平面直角坐标系的第一象限内,如果一个点(x,y)与原点(0,0)的 ...
- UVaLive 7362 Farey (数学,欧拉函数)
题意:给定一个数 n,问你0<= a <=n, 0 <= b <= n,有多少个不同的最简分数. 析:这是一个欧拉函数题,由于当时背不过模板,又不让看书,我就暴力了一下,竟然A ...
- 数学之欧拉函数 &几道poj欧拉题
欧拉函数总结+证明 欧拉函数总结2 POJ 1284 原根 #include<iostream> #include<cstdio> #include<cstring> ...
随机推荐
- 每天一个JS 小demo之韩雪冬轮播图。主要知识点:html,css布局,对于数组和对象的理解和运用
@charset "utf-8"; /* CSS Document */ ;; } li { list-style: none; } img { border: none; } b ...
- .Net开发的两个小技巧
一.@符号的妙用 1.可以作为保留关键字的标识符 C#规范当中,不允许使用保留关键字(class.bool等)当作普通的标识符来命名,这时候@符号作用就体现 出来了,可以通过@符号前缀把这些保留关键字 ...
- Spring学习(2)---IOC
1.接口及面向接口编程 2.什么是IOC 3.Spring的Bean配置 4.Bean的初始化 5.Spring的常用注入方式 (一)接口 用于沟通的中介物的抽象化 实体把自己提供给我外接的一种抽象化 ...
- html逻辑运算符
逻辑运算符 逻辑运算符用于测定变量或值之间的逻辑. 给定 x=6 以及 y=3,下表解释了逻辑运算符: &&and(x < 10 && y > 1) 为 t ...
- canvas水波纹效果
先看效果 演示效果 自然界中水波纹效果十分麻烦,我这里只是根据水波纹的几个特性,在理想环境下模拟水波纹的扩散效果. 这里应用到的属性有:扩散.波动.折射. 扩散:很好理解,水波纹会从触发原点开始向周围 ...
- 用php+mysql+ajax实现淘宝客服或阿里旺旺聊天功能 之 后台页面
在上一篇随笔中,我们已经看了如何实现前台的对话功能:前台我限定了店主只有一人,店铺只有一个,所有比较单一,但后台就不一样了,而后台更像是我们常见的聊天软件:当然,前台也应该实现这种效果,但原理懂了,可 ...
- eclipse 更改官方配色
打开Eclipse,help->Install new software, 输入 http://eclipse-color-theme.github.com/update,等待就OK了. 然后w ...
- [Linux] PHP程序员玩转Linux系列-Ubuntu配置SVN服务器并搭配域名
在线上部署网站的时候,大部分人是使用ftp,这样的方式很不方便,现在我要在线上安装上SVN的服务器,直接使用svn部署网站.因为搜盘子的服务器是ubuntu,因此下面的步骤是基于ubuntu的. 安装 ...
- JVM中class文件探索与解析(一)
一直想成为一名优秀的架构师的我,转眼已经工作快两年了,对于java内核了解甚少,闲来时间,看看JVM,吧自己的一些研究写下来供大家参考,有不对的地方请指正. 废话不多说,一起来看看JVM中类文件是如何 ...
- java web项目中 读取properties 路径的问题
可以先获取项目的classPath String classPath = this.getClass().getResource("/").getPath();//获取classP ...