zoukankan      html  css  js  c++  java
  • Project Euler 不定期更新

    官网传送门:https://projecteuler.net/

    Problem 1

    #include<cstdio>
    #include<iostream>
    using namespace std;
    int ans;
    int main()
    {
        int i;
        for(i=1;i<=999;i++) 
            if(i%3==0||i%5==0)
                ans+=i;
        printf("%d",ans);
        return 0;
    }
    

    Problem 2

    #include<cstdio>
    #include<iostream>
    using namespace std;
    typedef long long LL;
    typedef unsigned long long ULL;
    const LL ML=4000000; // MAX LIMIT
    LL ans;
    LL f[ML];
    int main()
    {
        int i;
        int n;
        f[1]=1; f[2]=2;
        for(i=3;i<=10000;i++) {
            f[i]=f[i-1]+f[i-2];
            if(f[i]>ML) {
                n=i-1;
                break;
            }
        }
        for(i=1;i<=n;i++)
        {
            if(~f[i]&1) 
                ans+=f[i];
        }
        cout<<ans;
        return 0;
    }
    

    Problem 3

    #include<cstdio>
    #include<iostream>
    using namespace std;
    typedef long long LL;
    typedef unsigned long long ULL;
    int main()
    {
        LL i,n=600851475143;
        LL ans=0;
        for(i=2;i*i<=n;i++) {
            if(n%i==0) ans=max(ans,i);
            while(n%i==0) { n=n/i; }
        }
        if(n>0) ans=max(ans,n);
        cout<<ans;
        return 0;
    }
    

    Problem 4

    #include<cstdio>
    #include<iostream>
    using namespace std;
    typedef long long LL;
    typedef unsigned long long ULL;
    int main()
    {
        int i,j,tmp,rev,ans=0;
        for(i=100;i<=999;i++) 
            for(j=100;j<=999;j++) {
                tmp=i*j;
                rev=0;
                while(tmp>0) 
                {
                   rev=(rev<<1)+(rev<<3)+tmp%10;
                   tmp=tmp/10;
                }
                if(rev==i*j)
                    ans=max(ans,rev);
            }
        cout<<ans;
        return 0;
    }
    

    Problem 5

    #include<cstdio>
    #include<iostream>
    using namespace std;
    typedef long long LL;
    typedef unsigned long long ULL;
    LL gcd(LL a,LL b)
    {
        if(b==0)
            return a;
        else return gcd(b,a%b);
    }
    LL lcm(LL a,LL b)
    {
        return a*b/gcd(a,b);
    }
    //==========================================
    int main()
    {
        LL ans=1;
        for(LL i=1;i<=20;i++)
            ans=lcm(i,ans);
        cout<<ans;
        return 0;
    }
    

    Problem 6

    #include<cstdio>
    #include<iostream>
    using namespace std;
    typedef long long LL;
    typedef unsigned long long ULL;
    LL gcd(LL a,LL b)
    {
        if(b==0)
            return a;
        else return gcd(b,a%b);
    }
    LL lcm(LL a,LL b)
    {
        return a*b/gcd(a,b);
    }
    //==========================================
    int main()
    {
        LL ans1=0,ans2=0,ans;
        for(LL i=1;i<=100;i++) {
            ans1+=i*i;
            ans2+=i;
        }
        ans=ans2*ans2-ans1;
        cout<<ans;
        return 0;
    }
    

    Problem 7

    #include<vector>
    #include<cstdio>
    #include<bitset>
    #include<iostream>
    using namespace std;
    typedef long long LL;
    typedef unsigned long long ULL;
    LL gcd(LL a,LL b)
    {
        if(b==0)
            return a;
        else return gcd(b,a%b);
    }
    LL lcm(LL a,LL b)
    {
        return a*b/gcd(a,b);
    }
    const int _N=1e6+5;
    const int _LI=1e6;
    bitset<_N> tag;
    vector<int> pm;
    void prime()
    {
        pm.push_back(0);
        LL i,j;
        for(i=2;i<=_LI;i++) {
            if(tag[i]) continue;
            pm.push_back(i);
            for(j=i*i;j<=_LI;j+=i)
                tag[j]=1;
        }
        return;    
    }
    //==========================================
    int main()
    {
        prime();
        cout<<pm[10001];
        return 0;
    }
    

    Problem 8

    #include<vector>
    #include<cstdio>
    #include<bitset>
    #include<iostream>
    using namespace std;
    typedef long long LL;
    typedef unsigned long long ULL;
    LL gcd(LL a,LL b)
    {
        if(b==0)
            return a;
        else return gcd(b,a%b);
    }
    LL lcm(LL a,LL b)
    {
        return a*b/gcd(a,b);
    }
    const int _N=1e6+5;
    const int _LI=1e6;
    bitset<_N> tag;
    vector<int> pm;
    void prime()
    {
        pm.push_back(0);
        LL i,j;
        for(i=2;i<=_LI;i++) {
            if(tag[i]) continue;
            pm.push_back(i);
            for(j=i*i;j<=_LI;j+=i)
                tag[j]=1;
        }
        return;    
    }
    //==========================================
    const int N=1000+5;
    ULL a[N];
    int n=1000;
    int main()
    {
        int i,j;
        char c;
        ULL tmp,ans=0;
        for(i=1;i<=n;i++) {
            for(c=getchar();c<'0'||c>'9';c=getchar());
            a[i]=c-'0';
        }
        for(i=1;i<=n-12;i++) {
            tmp=1;
            for(j=i;j<=i+12;j++) 
                tmp=tmp*a[j];
            ans=max(ans,tmp);
        }
        cout<<ans;
        return 0;
    }
    

    Input

    73167176531330624919225119674426574742355349194934
    96983520312774506326239578318016984801869478851843
    85861560789112949495459501737958331952853208805511
    12540698747158523863050715693290963295227443043557
    66896648950445244523161731856403098711121722383113
    62229893423380308135336276614282806444486645238749
    30358907296290491560440772390713810515859307960866
    70172427121883998797908792274921901699720888093776
    65727333001053367881220235421809751254540594752243
    52584907711670556013604839586446706324415722155397
    53697817977846174064955149290862569321978468622482
    83972241375657056057490261407972968652414535100474
    82166370484403199890008895243450658541227588666881
    16427171479924442928230863465674813919123162824586
    17866458359124566529476545682848912883142607690042
    24219022671055626321111109370544217506941658960408
    07198403850962455444362981230987879927244284909188
    84580156166097919133875499200524063689912560717606
    05886116467109405077541002256983155200055935729725
    71636269561882670428252483600823257530420752963450
    

    Output

    23514624000
    

    Problem 9

    题意:输出a,b,c的积。

    #include<vector>
    #include<cstdio>
    #include<bitset>
    #include<iostream>
    using namespace std;
    typedef long long LL;
    typedef unsigned long long ULL;
    LL gcd(LL a,LL b)
    {
        if(b==0)
            return a;
        else return gcd(b,a%b);
    }
    LL lcm(LL a,LL b)
    {
        return a*b/gcd(a,b);
    }
    const int _N=1e6+5;
    const int _LI=1e6;
    bitset<_N> tag;
    vector<int> pm;
    void prime()
    {
        pm.push_back(0);
        LL i,j;
        for(i=2;i<=_LI;i++) {
            if(tag[i]) continue;
            pm.push_back(i);
            for(j=i*i;j<=_LI;j+=i)
                tag[j]=1;
        }
        return;    
    }
    //==========================================
    const int N=1000+5;
    ULL a[N];
    int n=1000;
    int main()
    {
        int i,j;
        int a,b,c;
        for(a=1;a<=1000;a++)
            for(b=a+1;b<=1000&&1000-a-b>b;b++) 
                if(a*a+b*b==(1000-a-b)*(1000-a-b)) {
                    cout<<a*b*(1000-a-b);
                    return 0;
                }
        return 0;
    }
    

    Problem 10

    #include<vector>
    #include<cstdio>
    #include<bitset>
    #include<iostream>
    using namespace std;
    typedef long long LL;
    typedef unsigned long long ULL;
    LL gcd(LL a,LL b)
    {
        if(b==0)
            return a;
        else return gcd(b,a%b);
    }
    LL lcm(LL a,LL b)
    {
        return a*b/gcd(a,b);
    }
    const int _N=1e7+5;
    const int _LI=2e6;
    bitset<_N> tag;
    vector<int> pm;
    void prime()
    {
        pm.push_back(0);
        LL i,j;
        for(i=2;i<=_LI;i++) {
            if(tag[i]) continue;
            pm.push_back(i);
            for(j=i*i;j<=_LI;j+=i)
                tag[j]=1;
        }
        return;    
    }
    //==========================================
    const LL ML=2000000;
    int main()
    {
        int i,j;
        prime();
        LL ans=0;
        for(i=1;i<pm.size();i++) {
            if(pm[i]>=ML)
                break;
            ans+=pm[i];
        }
        cout<<ans;
        return 0;
    }
    

    Problem 401 Sum of squares of divisors

    传送门

    The divisors of 6 are 1,2,3 and 6.
    The sum of the squares of these numbers is 1+4+9+36=50.

    Let sigma2(n) represent the sum of the squares of the divisors of n. Thus sigma2(6)=50.

    Let SIGMA2 represent the summatory function of sigma2, that is SIGMA2(n)=∑ sigma2(i) for i=1 to n.
    The first 6 values of SIGMA2 are: 1,6,16,37,63 and 113.

    Find SIGMA2(10^15) modulo 10^9.

    思路:

    [SIGMA2(n)=sum_{i=1}^{n}sum_{d|n}d^2 ]

    [=sum_{d=1}^{n}d^2sum_{i=1}^{n}[d|i] ]

    [=sum_{d=1}^{n}d^2 lfloor {n over i } floor ]

    数论分块即可。

    平方和公式:(sum_{i=1}^{n}i^2= {n imes (n-1) imes (2 imes n+1) over 6})

    非常恶心的是 模数是(10^9) , 除以 (6) 还不能直接乘逆元了。

    发现 (n imes (n-1) imes (2 imes n+1)) 一定是 (6) 的倍数,所以分类讨论一下,把 (6) 分成 (3 imes 2) 分别整除了再计算,注意每一步都要取模,>1e9 的数要单独先取模。

    Code:

    #include<vector>
    #include<cstdio>
    #include<bitset>
    #include<cstring>
    #include<iostream>
    
    using namespace std;
    typedef long long LL;
    
    const LL MOD=1e9;
    
    LL mul_div(LL x,LL y,LL z,LL k1,LL k2)
    {
    	if(x%k1==0) x/=k1;
    	else if(y%k1==0) y/=k1;
    	else if(z%k1==0) z/=k1;
    	
    	if(x%k2==0) x/=k2;
    	else if(y%k2==0) y/=k2;
    	else if(z%k2==0) z/=k2;
    	
    	x%=MOD; y%=MOD; z%=MOD;
    	return x*y%MOD*z%MOD;
    }
    LL sum(LL x) { return mul_div(x,x+1,2*x+1,2,3); }
    
    int main()
    {
        LL i,j,t,ans=0;
        LL n=1e15;
        for(i=1;i<=n;i=j+1) {
            t=n/i; j=n/t;
            ans=(ans+(sum(j)-sum(i-1)+MOD)%MOD*(t%MOD)%MOD)%MOD;
        }
        cout<<ans<<endl;
        return 0;
    }
    

    Answer: 281632621

  • 相关阅读:
    makeBackronym
    Regular Ball Super Ball
    Svn忽略配置
    How does it work in C#?
    Counting sheep...
    Convert boolean values to strings 'Yes' or 'No'.
    codeforces 236A . Boy or Girl(串水问题)
    cocos2d-x3.0 解释具体的新的物理引擎setCategoryBitmask()、setContactTestBitmask()、setCollisionBitmask()
    ACM字符串处理算法经典:字符串搜索
    MessageFormat类别:快速格式化字符串
  • 原文地址:https://www.cnblogs.com/cjl-world/p/13545113.html
Copyright © 2011-2022 走看看