UVa 10837 (欧拉函数 搜索) A Research Problem
发现自己搜索真的很弱,也许做题太少了吧。代码大部分是参考别人的,=_=||
题意:
给出一个phi(n),求最小的n
分析:
回顾一下欧拉函数的公式:,注意这里的Pi是互不相同的素数,所以后面搜索的时候要进行标记。
先找出所有的素数p,满足(p - 1)整除题目中所给的phi(n)
然后暴搜。。
素数打表打到1e4就够了,如果最后剩下一个大素数单独进行判断。
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
using namespace std; const int maxn = ;
const int INF = ; int phi_n, ans; bool vis[maxn + ];
int prime[], pcnt = ;
int fac[], tot; void prime_table()
{
int m = sqrt(maxn + 0.5);
for(int i = ; i <= m; i++) if(!vis[i])
for(int j = i * i; j <= maxn; j += i) vis[j] = true;
for(int i = ; i <= maxn; i++) if(!vis[i]) prime[pcnt++] = i;
} void factor(int n)
{
tot = ;
for(int i = ; i < pcnt && (prime[i]-) * (prime[i]-) <= n; i++) if(n % (prime[i] - ) == )
fac[tot++] = prime[i];
} int judge(int n)
{
if(n == ) return ;
n++;
//判断剩余的phin中加1后是否为素数
for(int i = ; i < pcnt && prime[i] * prime[i] <= n; i++) if(n % prime[i] == )
return -;
//如果为素数的话,判断是否标记过
for(int i = ; i < tot; i++) if(vis[i] && n == fac[i])
return -;
return n;
} void dfs(int n, int phin, int d)
{
if(d == tot)
{
int t = judge(phin);
if(t > ) ans = min(ans, n * t);
return;
} dfs(n, phin, d+);
if(phin % (fac[d] - ) == )
{
vis[d] = true;
n *= fac[d];
phin /= (fac[d] - );
for(;;)
{
dfs(n, phin, d+);
if(phin % fac[d] != )
return;
phin /= fac[d]; n *= fac[d];
}
}
vis[d] = false;
} int main()
{
freopen("in.txt", "r", stdin); int kase = ;
prime_table();
while(scanf("%d", &phi_n) == && phi_n)
{
ans = INF;
memset(vis, false, sizeof(vis));
factor(phi_n);
dfs(, phi_n, );
printf("Case %d: %d %d\n", ++kase, phi_n, ans);
} return ;
}
代码君
UVa 10837 (欧拉函数 搜索) A Research Problem的更多相关文章
- 紫书 习题 10-18 UVa 10837 (欧拉函数变形)
		这道题很巧妙,要把式子变一下 phi(n) = n * (1 - 1 / p1) * (1 - 1 / p2)--(1 - 1 / pr) = n * ((p1-1) / p1) * ((p1-2) ... 
- UVa 11426 (欧拉函数 GCD之和) GCD - Extreme (II)
		题意: 求sum{gcd(i, j) | 1 ≤ i < j ≤ n} 分析: 有这样一个很有用的结论:gcd(x, n) = i的充要条件是gcd(x/i, n/i) = 1,因此满足条件的x ... 
- UVa 11440 (欧拉函数) Help Tomisu
		题意: 给出N和M,统计区间x ∈ [2, N!],x满足所有素因子都大于M的x的个数. 分析: 首先将问题转化一下,所有素因子都大于M 等价于 这个数与M!互素 对于k大于M!,k与M!互素等价于 ... 
- UVA	 10820  欧拉函数模板题
		这道题就是一道简单的欧拉函数模板题,需要注意的是,当(1,1)时只有一个,其他的都有一对.应该对欧拉函数做预处理,显然不会超时. #include<iostream> #include&l ... 
- UVA 11426 (欧拉函数&&递推)
		题意:给你一个数N,求N以内和N的最大公约数的和 解题思路: 一开始直接想暴力做,4000000的数据量肯定超时.之后学习了一些新的操作. 题目中所要我们求的是N内gcd之和,设s[n]=s[n-1] ... 
- UVA - 11426 欧拉函数(欧拉函数表)
		题意: 给一个数 N ,求 N 范围内所有任意两个数的最大公约数的和. 思路: f 数组存的是第 n 项的 1~n-1 与 n 的gcd的和,sum数组存的是 f 数组的前缀和. sum[n]=f[1 ... 
- Trees in a Wood. UVA 10214 欧拉函数或者容斥定理 给定a,b求 |x|<=a, |y|<=b这个范围内的所有整点不包括原点都种一棵树。求出你站在原点向四周看到的树的数量/总的树的数量的值。
		/** 题目:Trees in a Wood. UVA 10214 链接:https://vjudge.net/problem/UVA-10214 题意:给定a,b求 |x|<=a, |y|&l ... 
- GCD - Extreme (II) UVA - 11426 欧拉函数_数学推导
		Code: #include<cstdio> using namespace std; const int maxn=4000005; const int R=4000002; const ... 
- Trees in a Wood UVA - 10214 欧拉函数模板
		太坑惹,,,没用longlong各种WA #include <iostream> #include <string.h> #include <cstdio> #in ... 
随机推荐
- ListView防止滑动变色的小技巧
			listview滑动时会变成白色,如果背景色不是白色的话可以通过设置setCacheColorHint(Color.TRANSPARENT);来避免变色,.对应的xml也可以进行设置. 
- 【转,未试】android 9path教程与去黑边
			本帖最后由 ArcherFMY 于 2013-4-24 17:39 编辑 <ignore_js_op> draw9patch.zip (124.83 KB) 这是Draw9patch& ... 
- Java多线程——<四>让线程有返回值
			一.概述 到目前为止,我们已经能够声明并使一个线程任务运行起来了.但是遇到一个问题:现在定义的任务都没有任何返回值,那么加入我们希望一个任务运行结束后告诉我一个结果,该结果表名任务执行成功或失败,此时 ... 
- 循环队列实现(C++) Ring Buffer
			循环队列:队列有着先入先出的特性.但是对于队列如果删除队头以后剩下的空间将不会被释放,又由于队列只能由队尾插入这就导致被删除部分的空间被浪费.解决这个问题就是循环队列.循环队列顾名思义就是将队列串起来 ... 
- hadoop浅尝  hadoop与hbase交互
			在安装好hbase之后,运行一个与hadoop无关的纯hbase程序成功了. 接着写一个hadoop与hbase进行交互的小程序,这个程序的运行方法依然与前文相同, 即导出jar文件在shell下运行 ... 
- Apache Ignite——新一代数据库缓存系统
			[编者按]飞速增长的数据需要大量存储,对这些数据的管理也不是一件容易的事.但相比于存储和管理,如何处理数据才是开发人员真正的挑战.对于TB级别数据的存储和处理通常会让开发人员陷入速度.可扩展性和开销的 ... 
- SQO2008配置管理工具服务显示远程过程调用失败
			前两天,装了VS2012后,打开SQL2008配置管理工具,发现SQL服务名称里什么也没有,只有一个提示:(如图) 卸载了一个叫"Microsoft SQL Server 2012Local ... 
- 恢复mdf文件到数据库方法
			CREATE DATABASE crm_testdb1 ON (FILENAME = N'C:\e527051\crm_testdb\crm_testdb_20121104.mdf')FOR ATTA ... 
- [2-sat]HDOJ1824 Let's go home
			中问题 题意略 和HDOJ 3062一样 这里 每个队员都有 选 和 不选 两种, 即 上篇所说的$x$和$x’$ 建图:队长(a)留下或者其余两名队员(b.c)同时留下 那么就是$a' \Right ... 
- @JsonFormat时间不对
			实际时间为:2015-07-06 20:20:23 1. @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date ... 
