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> ...
随机推荐
- Xamarin开发笔记—WebView双项事件调用
1.Xamarin调用WebView: 原理:Xamarin.Forms WebView内置方法xx.Eval(..)可以调用到页面里面的js函数. WebView展示的代码如下: var htmlS ...
- 限制容器对内存的使用 - 每天5分钟玩转 Docker 容器技术(27)
一个 docker host 上会运行若干容器,每个容器都需要 CPU.内存和 IO 资源.对于 KVM,VMware 等虚拟化技术,用户可以控制分配多少 CPU.内存资源给每个虚拟机.对于容器,Do ...
- angularjs下拉框实现渲染html
angualrjs处于安全的考虑,插值 指令会对相应字符串进行过滤,避免出现html攻击.但是在一些时候,我们需要渲染html,比如实现一个分级的下拉框,代码如下: <body ng-app=& ...
- 使用zabbix监控mysql的三种方式
使用zabbix监控mysql的三种方式 1.只是安装agent 2.启用模板监控 3.启用自定义脚本的模板监控 zabbix中默认有mysql的监控模板.默认已经在zabbix2.2及以上的版本中. ...
- 关于MATLAB处理大数据坐标文件2017526
运行六个特征,提高了3分,也就是说以前做的特征已经用完了,穷途末路,依靠以前的特征已经很难取得进步了,提出以下建议 1.测试集曾经运行错误的数据尽早画出图形,并尽可能发现问题并提出特征 2.运行其他程 ...
- WindowManager.LayoutParams的探究
上次在子线程更新UI时用了一下WindowManager.LayoutParams,当时觉得不太顺手.以前都是用空参构造器,这次用了type和flag属性,出现了意想不到的效果.也看看源码吧,多锻炼锻 ...
- 【CC2530入门教程-05】CC2530的串行接口原理与应用
第5课 CC2530的串行接口原理与应用 广东职业技术学院 欧浩源 一.并行通信与串行通信 微控制器与外设之间的数据通信,根据连线结构和传送方式的不同,可以分为两种:并行通信和串行通信. 并行通信 ...
- js中的数字格式变成货币类型的格式
<!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8& ...
- LVS工作模式与调度算法
LVS三种工作模式.十种调度算法介绍 工作模式介绍: 1.Virtual server via NAT(VS-NAT) 优点:集群中的物理服务器可以使用任何支持TCP/IP操作系统,物理服务器可以分配 ...
- 机器学习之分类问题实战(基于UCI Bank Marketing Dataset)
导读: 分类问题是机器学习应用中的常见问题,而二分类问题是其中的典型,例如垃圾邮件的识别.本文基于UCI机器学习数据库中的银行营销数据集,从对数据集进行探索,数据预处理和特征工程,到学习模型的评估与选 ...