uva 10837 - A Research Problem(欧拉函数+暴力)

news/2024/7/6 2:03:31

题目链接:uva 10837 - A Research Problem

题目大意:给定一个phin,要求一个最小的n,欧拉函数n等于phin

解题思路:欧拉函数性质有,p为素数的话有phip=p1;如果p和q互质的话有phipq=phipphiq
然后根据这样的性质,n=pk11(p11)pk22(p21)pkii(pi1),将所有的pi处理出来,暴力搜索维护最小值,虽然看上去复杂度非常高,但是因为对于垒乘来说,增长非常快,所以搜索范围大大被缩小了。

#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>

using namespace std;
const int maxp = 1e4;
const int INF = 0x3f3f3f3f;

int ans;
int np, vis[maxp+5], pri[maxp+5];
int nf, fact[maxp+5], v[maxp+5];

void prime_table (int n) {
    np = 0;
    for (int i = 2; i <= n; i++) {
        if (vis[i])
            continue;

        pri[np++] = i;
        for (int j = i * i; j <= n; j += i)
            vis[j] = 1;
    }
}

void get_fact (int n) {
    nf = 0;

    for (int i = 0; i < np && (pri[i]-1) * (pri[i]-1) <= n; i++) {
        if (n % (pri[i]-1) == 0)
            fact[nf++] = pri[i];
    }
}

bool judge (int n) {
    if (n == 2)
        return true;
    for (int i = 0; i < np && pri[i] * pri[i] <= n; i++)
        if (n % pri[i] == 0)
            return false;

    for (int i = 0; i < nf; i++)
        if (v[i] && fact[i] == n)
            return false;
    return true;
}

void dfs (int ret, int cur, int d) {
    if (d == nf) {
        if (judge(cur+1)) {

            if (cur == 1)
                cur = 0;

            ans = min(ans, ret * (cur+1));
        }
        return;
    }

    dfs(ret, cur, d+1);
    if (cur % (fact[d]-1) == 0) {
        v[d] = 1;
        ret *= fact[d];
        cur /= (fact[d]-1);

        while (true) {
            dfs(ret, cur, d+1);

            if (cur % fact[d])
                return;
            ret *= fact[d];
            cur /= fact[d];
        }
        v[d] = 0;
    }
}

int solve (int n) {
    ans = INF;
    get_fact(n);
    memset(v, 0, sizeof(v));
    dfs(1, n, 0);
    return ans;
}

int main () {
    prime_table(maxp);
    int cas = 1, n;
    while (scanf("%d", &n) == 1 && n) {
        printf("Case %d: %d %d\n", cas++, n, solve(n));
    }
    return 0;
}

http://www.niftyadmin.cn/n/1450260.html

相关文章

J2ME基础入门教程(转)

如果您曾经到网站上查询有关Java 2 Micro Edition 的资料&#xff0c;十之八九会被一大堆的技术名词搞的一头雾水。什么 KVM &#xff0c;什么CLDC 、CDC 、MIDP &#xff0c;后面还冒出了Personal Java 、Embedded Java以及JES 等名词。虽然名为Java 的微小版本&#xff0c;可…

display:block; 块级元素。a,span标签设置宽度和高度

display:block;是让对象成为块级元素(比如a&#xff0c;span等) 转化后 可以对a或者span标签进行width和height设置&#xff0c;否则设置不了display有很多对象&#xff0c;具体可以参考http://www.w3school.com.cn/css/pr_class_display.asp一般都是用display:none和display:b…

jquery mysql php_Ajax+jQuery+PHP+MySQL实现无刷新发表评论应用

PS&#xff1a;演示做过特殊处理&#xff0c;不会保存用户提交的数据&#xff0c;只做演示。附件内为完整实例&#xff0c;数据会提交到数据库&#xff0c;并显示在前台。HTML部分首先我们放置一个评论表单和显示评论列表#comments发表评论昵称&#xff1a;评论内容&#xff1a…

Entity Framework 6.1-Code First

Entity Framework 6.1-Code First 原文:Entity Framework 6.1-Code First Code First-代码优先&#xff0c;先创建好领域模型。新建MyDbContext继承DbContext。根据代码自动生成数据库 Code First优点 1.可以自由的创建领域模型&#xff0c;基本不受EF框架的限制。自由的命名。…

python微信框架_WeRoBot 1.1.0,Python 的微信公众号开发框架

WeRoBot 1.1.0 发布了。有以下更新&#xff1a;为 werobot.robot.BaseRoBot 增加 client property 允许在初始化 werobot.robot.BaseRoBot 时传入 Config 。注意如果传入了 config &#xff0c; BaseRoBot 会忽略除 config 与 logger 外的其他所有的参数。 deprecate werobot.r…

uva 10548 - Find the Right Changes(拓展欧几里得)

题目链接&#xff1a;uva 10548 - Find the Right Changes 题目大意&#xff1a;给定A&#xff0c;B&#xff0c;C&#xff0c;求x&#xff0c;y&#xff0c;使得xAyBC&#xff0c;求有多少种解。 解题思路&#xff1a;拓展欧几里得&#xff0c;保证x&#xff0c;y均大于等于0&…

mac下安装redis以及redis扩展-----xampp

第一步&#xff1a;安装基础支持curl -O http://mirrors.kernel.org/gnu/m4/m4-1.4.13.tar.gztar -xzvf m4-1.4.13.tar.gzcd m4-1.4.13./configure –prefix/usr/localmakesudo make installcd ..curl -O http://mirrors.kernel.org/gnu/autoconf/autoconf-2.65.tar.gztar -xzv…

mybatis主键回填mysql_MyBatis 示例-主键回填

测试类&#xff1a;com.yjw.demo.PrimaryKeyTest自增长列数据库表的主键为自增长列&#xff0c;在写业务代码的时候&#xff0c;经常需要在表中新增一条数据后&#xff0c;能获得这条数据的主键 ID&#xff0c;MyBatis 提供了实现的方法。StudentMapper.xmluseGeneratedKeys&qu…