zoukankan      html  css  js  c++  java
  • LightOJ 1098

    题意:http://www.lightoj.com/volume_showproblem.php?problem=1098

    通过一个因子,求出与此因子相对应的其他因子,求和;

    例如n=20的时候,当因子为2时,对应的 2(4),3(6),4(8),5(10),6(12),7(14),8(16),9(18),10(20)  

    当为3时,对应的为2(6),3(9),4(12),5(15),6(18)

    此时要计算时要注意避免 2和3时之间有重复的情况。

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<iostream>
    #include<queue>
    #include<map>
    #include<math.h>
    #include<string>
    #include<vector>
    using namespace std;
    #define INF 0x3f3f3f3f
    #define LL long long
    #define N 1000006
    int main()
    {
        int T,t=1;
        scanf("%d",&T);
        while(T--)
        {
            LL e,f,n;
            scanf("%lld",&n);
            LL m=(int)sqrt(n);
            LL sum=0;
            for(LL i=2;i<=m;i++)
            {
                sum+=i;///本身这个因子满足
                e=i+1;///前面的已经统计  往后推
                f=n/i;///一共有多少个
                if(e>f) continue;
                sum+=(f-e+1)*i;///一共出现几次这个因子
                sum+=(f-e+1)*(e+f)/2;///因子对应的另一个因子  数列求和
            }
            printf("Case %d: %lld
    ",t++,sum);
        }
        return 0;
    }
  • 相关阅读:
    Mybatis中#{}与${}的区别:
    JDBC
    JavaScript与jQuery的区别
    JavaScript 高级
    AdminLTE
    servlet过滤器与监听器
    数据库连接池
    大对象数据LOB的应用
    Serializable
    泛型
  • 原文地址:https://www.cnblogs.com/a719525932/p/7717236.html
Copyright © 2011-2022 走看看