题目大意:
找对象的题。。。汗。。将你的编号(唯一)的所有因子加起来,所得到的的另一个编号的主人就是你的另一半。给出你的编号,要求找到你的对象的编号。
一开始直接模拟TLE。
然后后来看到别人是这么做的:
#include#include int main() { int T; scanf(%d,&T); while(T--) { int n; scanf(%d,&n); int cur=2; int ans=1; for(int i=2;(i>>1)<=n;i++) //将问题规模减半 { if(n%i==0) { if(n/i > i) //如果把不等于i,那么说明i和n/i都是因子 ans+=n/i+i; else if(n/i==i) //等于i就一个因子 ans+=i; else //如果n/i 后来采用类似筛选素数的方法,打表。
我们先将2的倍数的都+上2.。。3的倍数都加上3、。。。。
要注意的是如果n==1的时候答案为0.
#includeconst int MAXN=500000+1; const int N=250000; int ans[MAXN]={0}; int main() { for(int i=2;i