【数论】hdu_1999_不可摸数_201407310919

2024-06-14 01:48

本文主要是介绍【数论】hdu_1999_不可摸数_201407310919,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

不可摸数

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 8360    Accepted Submission(s): 2151


Problem Description
s(n)是正整数n的真因子之和,即小于n且整除n的因子和.例如s(12)=1+2+3+4+6=16.如果任何
数m,s(m)都不等于n,则称n为不可摸数.

Input
包含多组数据,首先输入T,表示有T组数据.每组数据1行给出n(2<=n<=1000)是整数。

Output
如果n是不可摸数,输出yes,否则输出no

Sample Input
  
3 2 5 8

Sample Output
  
yes yes no

Author
Zhousc@ECJTU


思路:
采用 筛法求素数的理论来求100w以内的数的因子和,测试可以知道当超过100w时,因子和<=1000的不可摸数的数量不变。(详见代码)

代码如下:

</pre><pre name="code" class="html"><pre name="code" class="html">#include <stdio.h>
#include <string.h>
#include <time.h>
#define maxn 1000005int s[maxn],sum[maxn];void InitTable()
{int i,j,k,num=0;memset(sum,0,sizeof(sum));memset(s,0,sizeof(s));for(i=1;i<maxn/2;i++)//类似于筛法求素数,以 i 为因子, {for(j=i*2;j<maxn;j+=i)sum[j]+=i;}for(i=2;i<maxn;i++)if(sum[i]<=1000){s[sum[i]]++;}//for(i=1;i<=1000;i++)//当maxn大于100w时,num的值不变 //if(s[i]>0)//{//num++;//}//printf("num=%d\n",num);
}
int main()
{int T;// 1 -> 6 为测试程序运行时间的; //clock_t start,finish;// 1 //double total_time;// 2//start = clock();// 3InitTable();//finish = clock();// 4//total_time = (double)(finish-start)/CLOCKS_PER_SEC;// 5//printf("%lf seconds\n",total_time);// 6scanf("%d",&T);while(T--){int i,j,k,n;scanf("%d",&n);if(s[n]==0)printf("yes\n");elseprintf("no\n");}return 0;
}


 
体会 :以前遇到过用筛法求因子的题,一直没好好看怎么弄的,之前的那个题用暴力勉强可以过,然后就没有具体看筛法的,现在彻底弄明白了,用时间函数测试的求100w的因子和的时间是328MS,比较快
 

这篇关于【数论】hdu_1999_不可摸数_201407310919的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1059032

相关文章

想让Python序列切片更高效?这些技巧你不可不知!

目录 1、自定义类实现切片 🍏 1.1 实现__getitem__方法 1.2 支持正负索引与步长 2、利用 collections.abc 模块 🧠 2.1 继承MutableSequence类 2.2 重写关键方法 3、使用标准库itertools.slice 🍲 3.1 itertools工具介绍 3.2 slice函数应用实例 4、通过生成器实现动态切片 🌀

上海邀请赛 A题目 HDU 5236(dp)

先求出没有ctrl+s的时候构造长度为i的期望f[i] 。然后枚举保存的次数,求出最小即可。 #include<cstdio>#include<cstdio>#include<cmath>#include<queue>#include<stack>#include<string>#include<cstring>#include<iostream>#include<map>

hdu 2586 树上点对最近距离 (lca)

,只要知道dis[i][j]=dis[i][root]+dis[j][root]-2*dis[Lca(i,j)][root].   其中root为树的根节点,LCA(i,j)为i,j的最近公共祖先。 所以我们先把所有的询问储存下来,然后离线直接查询。复杂度是o(n+q)的。 VIE #include<cstdio>#include<algorithm>#include<i

web前端不可错过的开发工具–Adobe Brackets(开源、简洁强大的HTML、CSS和JavaScript集成开发环境)

Adobe Brackets是一个开源的基于HTML/CSS/JavaScript开发,运行在native shell上的集成开发环境。该项目由Adobe创建和维护,根据MIT许可证发布。提供Windows和OS X平台支持。 Brackets的特点是简约、快捷,没有很多的视图或者面板,它的核心目标是减少在开发过程中那些效率低下的重复性工作,例如浏览器刷新,修改元素的样式,搜索功能等等。

Altera的JTAG电路下载模块为何上下拉电阻,不可不知的秘密

一、FPGA背景信息 当前的FPGA市场上有国际和国产两大体系,国际排名,一直很稳定,国际上前三名Xilinx、Altera、Lattice,国内FPG厂商也在填补空白,低端、中低端市场上发力,替代潮流已在兴起,目前国内前五,分别是京威齐力、安路科技、广州高云、复旦微电子、西安智多晶,国货当自强,真的很厉害。 FPGA随着人工智能、大数据、云计算、数据中心而越发收到重视,对于我们硬件工程师来说

HDU_1013

这个题目尤其需要注意的是开始输入的时候的数的大小,开始输入时有可能非常的大超过了长整型的范围,所以不能开始用整形来存放输入的,,就是开始的时候没有注意到这个问题所以开始的时候一直没有AC,后来就是用一个数组接收输入,然后在经过第一步转化之后就可以用一个整数来装了 #include <iostream>#include <stdlib.h>#include <string>usin

1999-2022年 297个地级市-医院卫生院数量及床位数量(数据收集)

全国297个地级市的医院卫生院数量的稳步增长是医疗事业发展的一个重要标志。政府的持续投入和对医疗设施的改善,不仅提升了医疗服务的硬件水平,也通过引进和培养医疗人才、优化服务流程,提高了医疗服务的整体质量。这些举措极大地增强了人民群众在就医时的获得感和满意度。 医院卫生院的数量和床位数量是衡量一个地区医疗卫生事业发展水平的关键指标。它们与经济发展的关系密切,可以从以下几个方面进行理解: 1. *

win10安装虚拟机提示主IP地址显示网络信息不可用

问题:在虚拟机详情下面显示 主ip地址:网络信息不可用 解决方案 先root用户[root@localhost~]#cd … [root@localhost/]#cd /etc/sysconfig/network-scripts进入network-sctipts 然后ls会有个ifcfg-ens33的文件 vi这个ifcfg-ens33文件进入编辑 输入i 进入编辑模式 把ONBOOT=n

最长回文子串(百度笔试题和hdu 3068)

版权所有。所有权利保留。 欢迎转载,转载时请注明出处: http://blog.csdn.net/xiaofei_it/article/details/17123559 求一个字符串的最长回文子串。注意子串是连续的,子序列是不连续的。对于最长回文子序列,要用动态规划解,具体请看: http://blog.csdn.net/xiaofei_it/article/details/1

杭电ACM hdu 2110 Crisis of HDU 解题报告(母函数)

Problem Description 话说上回讲到HDU大战东洋小苟,结果自然是中方大胜,这一战也使得海东集团在全球同行业中的地位更加巩固。随着集团的发展,很多创业时期的元老逐步功成身退,先是8600移民海外,然后是linle夫妇退隐山林,逐渐的,最初众多的元老只剩下XHD夫妇和Wiskey三人了。 到了2020年,因为扩张过度加上老鼠数量逐年减少,公司的发展遇到了前所未有的危机,此时集团已经