码迷,mamicode.com
首页 > 其他好文 > 详细

Project Euler

时间:2018-10-04 09:03:48      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:stat   static   回文数   ace   include   init   move   std   gcd   

目录

P1

题意
求小于1000的所有3和5的倍数的和。

代码

#include <bits/stdc++.h>
using namespace std;

int get(int x) {
    return (x+1)*x/2;
}

int solve(int n) {
    return get(n/3)*3+get(n/5)*5-get(n/15)*15;
}

int main() {
    cout << solve(999) << endl;
    return 0;
}

P2

题意
求小于等于4e6的值为偶数的斐波那契数的和。

代码

#include <bits/stdc++.h>
using namespace std;

int main() {
    vector<int> fib({1, 2});
    long long res = 2;
    while (1) {
        int x = fib.end()[-2] + fib.end()[-1];
        if (x > 4000000) break;
        if (~x & 1) res += x;
        fib.push_back(move(x));
    }
    cout << res << endl;
    return 0;
}

P3

题意
求600851475143的最大质因子。
代码

#include <bits/stdc++.h>
using namespace std;

const long long Target = 600851475143;
const int N = sqrt(Target);

vector<int> init_prime() {
    static bool vis[N];
    vector<int> p;
    for (int i = 2; i < N; ++i) {
        if (!vis[i]) p.push_back(i);
        for (int j = 0; j < p.size() && p[j]*i < N; ++j) {
            vis[p[j]*i] = 1;
            if (i % p[j] == 0) break;
        }
    }
    return move(p);
}

int main() {
    auto p = init_prime();
    long long n = Target;
    long long res = 1;
    for (auto &x : p) {
        if (n % x == 0) res = x;
        while (n % x == 0) n /= x;
    }
    if (n > res) res = n;
    cout << res << endl;
    return 0;
}

P4

题意
求既是回文数,又是两个三位数乘积的最大数。
代码

#include <bits/stdc++.h>
using namespace std;

bool check(int x) {
    vector<int> d;
    do d.push_back(x % 10), x /= 10; while (x);
    for (int i = 0; i + i < d.size(); ++i)
        if (d[i] != d.end()[-i - 1]) return 0;
    return 1;
}

int main() {
    int res = 0;
    for (int x = 100; x < 1000; ++x)
        for (int y = 100; y < 1000; ++y)
            if (check(x * y)) res = max(res, x * y);
    cout << res << endl;
    return 0;
}

P5

题意
求1~20的最小公倍数。
代码

#include <bits/stdc++.h>
using namespace std;

int main() {
    long long lcm=1;
    for (int i=1;i<=20;++i)
        lcm=lcm*i/__gcd(1ll*i,lcm);
    cout<<lcm<<endl;
    return 0;
}

P6

题意
求 $(1+2+\cdots +100)^2-(1^2+2^2+\cdots +100^2)$
代码

#include <bits/stdc++.h>
using namespace std;

int main() {
    int sum=5050;
    int res=0;
    for (int i=1;i<=100;++i)
        res+=i*(sum-i);
    cout<<res<<endl;
    return 0;
}

Project Euler

标签:stat   static   回文数   ace   include   init   move   std   gcd   

原文地址:https://www.cnblogs.com/naiij/p/9740430.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!