hiho一下 第九十六周 数论五·欧拉函数
题目1 : 数论五·欧拉函数
描述
小Hi和小Ho有时候会用密码写信来互相联系,他们用了一个很大的数当做密钥。小Hi和小Ho约定了一个区间[L,R],每次小Hi和小Ho会选择其中的一个数作为密钥。
小Hi:小Ho,这次我们选[L,R]中的一个数K。
小Ho:恩,小Hi,这个K是多少啊?
小Hi:这个K嘛,不如这一次小Ho你自己想办法算一算怎么样?我这次选择的K满足这样一个条件:
假设φ(n)表示1..n-1中与n互质的数的个数。对于[L,R]中的任意一个除K以外的整数y,满足φ(K)≤φ(y)且φ(K)=φ(y)时,K<y。
也即是K是[L,R]中φ(n)最小并且值也最小的数。
小Ho:噫,要我自己算么?
小Hi:没错!
小Ho:好吧,让我想一想啊。
<几分钟之后...>
小Ho:啊,不行了。。感觉好难算啊。
小Hi:没有那么难吧,小Ho你是怎么算的?
小Ho:我从枚举每一个L,R的数i,然后利用辗转相除法去计算[1,i]中和i互质的数的个数。但每计算一个数都要花好长的时间。
小Hi:你这样做的话,时间复杂度就很高了。不妨告诉你一个巧妙的算法吧:
输入
第1行:2个正整数, L,R,2≤L≤R≤5,000,000。
输出
第1行:1个整数,表示满足要求的数字K
- 样例输入
-
4 6
- 样例输出
-
4
解答:
开始没看提示的时候想着用辗转相除,然后枚举,找出最小的fn,当数据特别大的时候,时间复杂度很高,然后提交TLE,超时了,代码也分享一下:
#include"iostream"
#define MAX 50000 using namespace std; int gcd(int a,int b)
{
if(b==)
return a;
return gcd(b,a%b);
} int solve(int l,int r)
{
int fn[MAX];
int fn_date,min,loc;
for (int i = l; i <= r; i++){
fn_date = ;
for(int j=;j<i;j++)
if(gcd(i,j)==)
fn_date++;
fn[i]=fn_date;
//cout << fn[i] << endl;
} min = fn[l];
loc = l;
for (int i = l; i <= r; i++)
if (fn[i]<min)
{
min = fn[i];
loc = i;
} return loc;
} int main()
{
int k,l,r;
cin>>l>>r; cout<<solve(l,r);
system("pause"); }
改了的递推AC版本:
#include"iostream"
#define MAX 5000000 using namespace std; bool isPrime[MAX+];
int primeList[MAX+];
int phi[MAX];
int primeCount = ; int solve(int l, int r)
{
for (int i = ; i <= MAX; i++)
isPrime[i] = true, phi[i] = ; for (int i = ; i <= MAX; i++)
{
if (isPrime[i]) {
primeList[++primeCount] = i;
phi[i] = i - ;
} for (int j = ; j <= primeCount; j++) {
if (i*primeList[j] > MAX) break;
isPrime[i*primeList[j]] = false;
if (i%primeList[j] == ) {
phi[i*primeList[j]] = phi[i] * primeList[j];
break;
}
else phi[i*primeList[j]] = phi[i] * (primeList[j] - );
}
} int min = l;
for (int i = l; i <= r; i++)
if (phi[i]<phi[min])
{
min = i;
} return min;
} int main()
{
int k, l, r;
cin >> l >> r; cout << solve(l, r);
system("pause"); }
hiho一下 第九十六周 数论五·欧拉函数的更多相关文章
- hihoCoder 数论五·欧拉函数
题目1 : 数论五·欧拉函数 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho有时候会用密码写信来互相联系,他们用了一个很大的数当做密钥.小Hi和小Ho约定 ...
- 【hihocoder 1298】 数论五·欧拉函数
[题目链接]:http://hihocoder.com/problemset/problem/1298 [题意] [题解] 用欧拉筛法; 能够同时求出1..MAX当中的所有质数和所有数的欧拉函数的值; ...
- hdu 1286:找新朋友(数论,欧拉函数)
找新朋友 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- 「POJ3696」The Luckiest number【数论,欧拉函数】
# 题解 一道数论欧拉函数和欧拉定理的入门好题. 虽然我提交的时候POJ炸掉了,但是在hdu里面A掉了,应该是一样的吧. 首先我们需要求的这个数一定可以表示成\(\frac{(10^x-1)}{9}\ ...
- hiho一下 第九十八周 搜索一·24点
题目1 : 搜索一·24点 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 周末,小Hi和小Ho都在家待着. 在收拾完房间时,小Ho偶然发现了一副扑克,于是两人考虑用这副 ...
- hihocode 第九十二周 数论一·Miller-Rabin质数测试
题目链接 检测n是否为素数,数据范围为2 <= n <= 10^18; 思路:Miller_Rabin素数检测模板题,原理:在Fetmat定理的基础之上,再利用二次探测定理: 对于任意的正 ...
- hihocoder hiho一下 第二十六周 最小生成树一·(Prim算法)
题目1 : 最小生成树一·Prim算法 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 最近,小Hi很喜欢玩的一款游戏模拟城市开放出了新Mod,在这个Mod中,玩家可以拥 ...
- 【NOIP训练】【规律+数论】欧拉函数的应用
Problem 1 [题目大意] 给出 多组数据 ,给出 求出 . 题解 证明: 除了 以为均为偶数, 所以互质的个数成对. 由 得 . 所以对于每对的和为 , 共有 对 . 则 Problem ...
- UVA 10820 - Send a Table 数论 (欧拉函数)
Send a Table Input: Standard Input Output: Standard Output When participating in programming contest ...
随机推荐
- 多个相同name的文本输入框,输入其中一个后,使剩下的不能输入值
可以用blur或keyup事件响应: 实现一: <body> <input type="text" id="AfterOtOt1" name= ...
- sqlserver日期函数 dateadd,datediff ,datepart ,datename,convert
reference:http://www.cnblogs.com/coconut_zhang/archive/2009/02/02/1382598.html http://blog.itpub.net ...
- [bzoj 1026]windy数(数位DP)
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1026 分析: 简单的数位DP啦 f[i][j]表示数字有i位,最高位的数值为j的windy数总 ...
- WCF 入门 (18)
前言 感冒了呀...but 不忌油炸,不忌辛辣,o(∩_∩)o . 第18集 WCF服务应该抛出fault 异常 Throwing fault exceptions from a WCF servic ...
- JS面向对象概述
这部分内容还是比较难理解的,像借用构造函数这种方法,实际工作中还是很常见的,不过对于后面的寄生理解还有点困难,只能慢慢学习了. 思维导图
- 小记:Quartz 当 Job 执行时间超过触发间隔时间时所发生的情况
一个普通的 Job 实现如下: public class Job1 : IJob { public void Execute(IJobExecutionContext context) { Conso ...
- Xamarin.Forms——WebView技术研究
在Xamarin中有一些Forms原生不太好实现的内容可以考虑使用HTML.Javascript.CSS那一套前端技术来实现,使用WebView来承载显示本地或网络上的HTML文件.不像OpenUri ...
- poj3522 kruskal+枚举
题目的意思是求构成生成树的边的最大边和最小边的差最小.枚举即可 #include<stdio.h> #include<string.h> #include<algorit ...
- Java-clone浅/深复制
Object中的clone方法为复制当前对象 protected native Object clone() throws CloneNotSupportedException; 想要使用这个方法需要 ...
- 【URAL 1917】Titan Ruins: Deadly Accuracy(DP)
题目 #include<cstdio> #include<algorithm> using namespace std; #define N 1005 int n, m, cn ...