
牛牛的质因数
发布日期:2021-05-08 11:20:17
浏览次数:18
分类:精选文章
本文共 987 字,大约阅读时间需要 3 分钟。
输出描述:
仅一行,表示答案对10^9+7取余的结果输入:
样例1 3样例2
10输出:
样例1 5样例2
342思路: 核心:素数筛+dp
将一个数分解为最小质因数的乘积再拼成一个大数,如果暴力的话必超时。 不妨将拼凑的过程整体化,即1+1=2,两个部分拼成一个完整部分。 可以发现,对于数字n,去拼成它的大数f[n]时,末尾必是n的最大素数,易得f[n]=f[n/最大素数]+n的最大素数,用dp去想,豁然开朗。 这里dp可以加在素数筛里,很舒服(我用的埃氏筛,当然线性筛也可以,可能写的代码稍微长一点 =……=// 素筛dp#includeusing namespace std;typedef long long ll;const int p=1e9+7;ll f[10000000];//每个数的处理后的大整数ll cal(int x) //计算10的x次方{ int ans=10; while(x--) { ans*=10; } return ans;}int main(){ ios::sync_with_stdio(false); cin.tie(0);cout.tie(0); int n; cin>>n; //埃氏筛 for(int i=2; i<=n; i++) { if( !f[i] )//如果是素数 { f[i]=i; //最大素数就是本身 //dp,用对数求要对f[j/i]乘多少个10,因为末尾素数可能很大,前面的数字要前移的位数等于末尾素数的位数 for(int j=i+i ;j<=n ;j+=i) f[j]=( f[j/i] * cal(log10(i))%p + i)%p; } } ll ans=0; for(int i=2 ; i<=n ;i++) //最后求和 { ans= ( ans+f[i] ) %p; } cout< <
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2025年03月24日 10时00分54秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
云计算之路-阿里云上:博客web服务器轮番CPU 100%
2021-05-09
云计算之路-阿里云上:服务器CPU 100%问题是memcached连接数限制引起的
2021-05-09
上周热点回顾(3.26-4.1)
2021-05-09
上周热点回顾(6.25-7.1)
2021-05-09
【故障公告】10:30-10:45 左右 docker swarm 集群节点问题引发故障
2021-05-09
工作半年的思考
2021-05-09
不可思议的纯 CSS 滚动进度条效果
2021-05-09
【CSS进阶】伪元素的妙用--单标签之美
2021-05-09
惊闻NBC在奥运后放弃使用Silverlight
2021-05-09
IE下尚未实现错误的原因
2021-05-09
创建自己的Docker基础镜像
2021-05-09
Python 简明教程 --- 20,Python 类中的属性与方法
2021-05-09
KNN 算法-理论篇-如何给电影进行分类
2021-05-09
Spring Cloud第九篇 | 分布式服务跟踪Sleuth
2021-05-09
CODING 敏捷实战系列课第三讲:可视化业务分析
2021-05-09
工作动态尽在掌握 - 使用 CODING 度量团队效能
2021-05-09
CODING DevOps 深度解析系列第二课报名倒计时!
2021-05-09
数据结构第八节(图(下))
2021-05-09
基于Mustache实现sql拼接
2021-05-09
POJ 2260 Error Correction 模拟 贪心 简单题
2021-05-09