[jzoj]3760. 【BJOI2014】Euler(欧拉函数)

来源:互联网 发布:java api 中文版 编辑:程序博客网 时间:2024/06/15 17:35

link

https://jzoj.net/senior/#contest/show/2008/3

Problem

给定y,使φ(x)=y的的x最小.

Data Constraint

30% 的数据:1<=y<=10.
60% 的数据:1<=y<=109.
100% 的数据:1<=y<=10121<=T<=2.

Solution

看似无从下手,但其实只要仔细观察,就可以发现其实还是很好推的,要细心一点.

看看前20个欧拉函数:
1, 1, 2, 2, 4, 2, 6, 4, 6, 4, 10, 4, 12, 6, 8, 8, 16, 6, 18, 8.

找到规律没?

应该找不到的.

那么我们来看看xy有什么联系?

x=pq11pq22Pqnn

很显然,当q1=q2==qn=1时,   y=(p11)(p21)(pn1)

qi>1时,有y=(p11)(p21)(pqi1i(pi1))(pn1)

那么关系就很简单了,我们可以发现,x的质因子要么是y的质因子,要么是y的约数+1.

我们把y的质因子全部存起来放在一个表里,把y的约数+1是质数的也存在一个表里,两个表分类递归,注意求约数时按从大到小的顺序走会快很多.

加一些剪枝就可以飞起来了~

时限是2s,我只跑了100ms-,感觉自己好厉(la)害(ji)

原创粉丝点击