七夕节(筛法思想)
Description
七夕节那天,月老来到数字王国,他在城门上贴了一张告示,并且和数字王国的人们说:"你们想知道你们的另一半是谁吗?那就按照告示上的方法去找吧!" 人们纷纷来到告示前,都想知道谁才是自己的另一半.告示如下:

数字N的因子就是所有比N小又能被N整除的所有正整数,如12的因子有1,2,3,4,6. 你想知道你的另一半吗?Input
输入数据的第一行是一个数字T(1<=T<=500000),它表明测试数据的组数.然后是T组测试数据,每组测试数据只有一个数字N(1<=N<=500000).
对于每组测试数据,请输出一个代表输入数据N的另一半的编号.
Sample Input
3
2
10
20
Sample Output
1 8 22
解题思路:题目要求所给数的所有因子之和。这道题如果针对每一个数都将其拆分成一个个的因子,必然会造成时间超时,要解决这个问题,我们需要考虑找每个数的因子有没有什么共性的方法,这样就可以通过打表实现了!是有的,每个数可能会很大,但其因子必然会小于其本身,而它的因子还有可能是其他数的因子,那么我们直接去枚举因子边可以了。而因子该怎么分配给含有该因子的数呢?是该因子的倍数的那些数必然含有该因子!我们直接分配给它的倍数就可以了,这里其实也是筛法的一种应用,代码和筛法求素数有点像。
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #define MAX 500010 5 using namespace std; 6 int a[MAX]; 7 void getsum() 8 { 9 int i,j; 10 for(i=1;i<=MAX;i++) 11 { 12 for(j=i*2;j<MAX;j+=i) 13 { 14 a[j]=a[j]+i; 15 } 16 } 17 } 18 int main() 19 { 20 int t,n; 21 scanf("%d",&t); 22 getsum(); 23 while(t--) 24 { 25 scanf("%d",&n); 26 printf("%d\n",a[n]); 27 } 28 return 0; 29 }
本文作者:王陸
本文链接:https://www.cnblogs.com/wkfvawl/p/9915591.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)