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 ...
随机推荐
- 简单的3个SQL视图搞定所有SqlServer数据库字典
网上有很多SQL SERVER数据库字典的SQL语句,七零八落,我在工作整理了一下思路,总结SQL代码如下.数据库字典包括表结构(分2K和2005).索引和主键.外键.约束.视图.函数.存储过程.触发 ...
- easyUI API(version 1.5)
不分先后,只做记录. jquery+easyui培训文档下载地址: 链接: https://pan.baidu.com/s/1dFgFXk9 密码: jj5d 1 easyui-draggable(拖 ...
- SQL-Server 创建数据库,创建表格
use master --使用master权限 create database E_Market--创建新数据库 on primary--指定主数据文件,有且只有一个 ( name='E_Market ...
- CSS_复习
//这个可以作为补白居中的替补方法<!doctype html> <html> <head> <meta charset="utf-8"& ...
- Java-HashSet
HashSet 的实现 public class HashSet<E> extends AbstractSet<E> implements Set<E>, Clon ...
- Java设计模式-责任链模式(Chain of Responsibility)
接下来我们将要谈谈责任链模式,有多个对象,每个对象持有对下一个对象的引用,这样就会形成一条链,请求在这条链上传递,直到某一对象决定处理该请求.但是发出者并不清楚到底最终那个对象会处理该请求,所以,责任 ...
- Java设计模式-适配器模式(Adapter)
适配器模式将某个类的接口转换成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的类的兼容性问题.主要分为三类:类的适配器模式.对象的适配器模式.接口的适配器模式.首先,我们来看看类的适配器模 ...
- 图解Android - Android GUI 系统 (5) - Android的Event Input System
Android的用户输入处理 Android的用户输入系统获取用户按键(或模拟按键)输入,分发给特定的模块(Framework或应用程序)进行处理,它涉及到以下一些模块: Input Reader: ...
- Java Filter过滤器的简单总结
1.Filter的介绍 Filter技术是servlet 2.3新增加的功能.它能够对Servlet容器的请求和响应对象进行检查和修改. Filter本身并不生成请求和响应对象,只是提供过滤功能. F ...
- git分支与版本管理、版本回退、冲突解决记录
一.基础使用 1.初始化本地仓库 git init 2.关联远程仓库 git remote add origin git@github.com:用户名/仓库名.git 3.添加远程仓库文件到本地 gi ...