[数]来自亮亮OJ的五道数学题

做了后面的题就知道前面的题怎么做了呢真棒_(:з」∠)_

Light OJ-

  -1138  以为是找规律结果是是找因子个数哒

    显然阶乘这种东西不是能一个一个查的,在下就打了个小表数了数零的个数,以为是逢5impossible其它以4个为周期。wa

    找了网上一个大的表来验证自己的脑胡,对上述规律进行了修改。wa

    好吧其实就是找因子中2*5的对数,因为2太多了所以我们数5就可以了。

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
typedef long long ll;

ll jg(ll n)
{
    ll ans = 0;
    while (n) {
        ans += n / 5;
        n /= 5;
    }
    return ans;
}

int main()
{
    int t, q;
    cin >> t;
    for (int i = 1; i <= t; i++) {
        cin >> q;
        int l = 0, r = 600000000;
        int mid,ans=0;
        while (l <= r) {
            mid = (l + r) >> 1;
            ll p = jg(mid);
            if (p == q) {
                ans = mid;
                r = mid-1;
            }
            else if (p > q)r = mid-1;
            else l = mid+1;
        }
        if (ans)printf("Case %d: %d
", i, ans);
        else printf("Case %d: impossible
", i);
    }
    return 0;
}
LO-1138

    存在性这种东西让二分来判就好惹。

  -1370  买素数竹子(警告:这是一个拗口的笑话

    找拥有互质数的个数不小于当前数的那个数,显然素数最优。

    打个表,二分找找第一个比当前数大的质数(素数听起来像是豆制品),然后加起来就完事了。

#include<iostream>
#include<cstdio>
using namespace std;
int p[80000];
bool isp[1000005];
int co;

void pri()
{
    co = 0;
    for (int i = 2; i < 1000005; i++)isp[i] = 1;
    for (int i = 2; i < 1000005; i++) {
        if (isp[i])p[++co] = i;
        for (int j = 1; j <= co && i*p[j] < 1000005; j++)isp[i*p[j]] = 0;
    }
}

int main()
{
    pri();
    int t;
    cin >> t;
    for (int i = 1; i <= t; i++) {
        int n, a;
        long long ans = 0;
        cin >> n;
        for (int j = 0; j < n; j++) {
            cin >> a;
            int l = 1, r = co,mid;
            while (l + 1 < r) {
                if (a == 1) {l = 0; break;}
                mid = (l + r) / 2;
                if (p[mid] > a)r = mid;
                else l = mid;
            }
            ans += p[l+1];
        }
        printf("Case %d: %lld Xukha
", i, ans);
    }
    return 0;
}
LO-1370

    然而红小豆还是re了,prime数组的大小记错了,开小了orz

  -1213  真·幻视出题

    一眼看出本质就完事了(不是我看的)

#include<iostream>
#include<cstdio>
using namespace std;
typedef long long ll;
int n, mod, a;
ll k;

ll pm(ll a, ll b) {
    ll ans = 1;
    for (; b; b >>= 1, a = a * a%mod)
        if (b & 1)ans = ans * a%mod;
    return ans;
}

int main() {
    int t;
    cin >> t;
    for (int i = 1; i <= t; i++) {
        cin >> n >> k >> mod;
        ll ans = 0;
        for (int j = 0; j < n; j++) { cin >> a; ans += a; }
        printf("Case %d: %lld
", i, ans*pm(n, k - 1)%mod *k%mod);
    }
    return 0;
}
OJ-1213

    本质就是奇怪的排列组合啦,丢给组合数学队友就好了owo

  -1236  一道之前做的不会的,后来做了别的题,再回来补发现是一个思路

    然而红小豆还是wa了两发。因为表打小了。请打大小为范围的开方的表。

    代码懒得贴了。和上一篇那个找拥有同一最小公倍数的对数的题完  全  一  样

  -1197  学到了新东西(๑•̀ㅂ•́)و✧

    超大的表,不会打..(。•ˇ‸ˇ•。)…

    然后神仙教我米勒拉宾,

    然后t了

    然后神仙去找他曾经做过的类似题去了

    然后红小豆打开了题解(补题就不要难为自己了(˘•ω•˘))

    然后 表  打  二  度

    然后就会了(ŎдŎ;)

    npb[1]=1;是精简板子之后遇到的第一个hack点,以后还是不能省略抹除0和1的存在啊(」><)」

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
int p[100005];
bool np[1000005],npb[1000005];
int co;

void pri()
{
    co = 0;
    np[1] = 1;
    for (int i = 2; i < 1000005; i++) {
        if (!np[i])p[co++]=i;
        for (int j = 0; j < co&&i*p[j] < 1000005; j++)np[i*p[j]] = 1;
    }
}

int main()
{
    pri();
    int t;
    cin >> t;
    ll a, b;
    for (int i = 1; i <= t; i++) {
        cin >> a >> b;
        ll ans = 0;
        if (b < 100005){
            for (int j = a; j <= b; j++)
                if (!np[j])ans++;
            printf("Case %d: %lld
", i, ans);
        }
        else {
            memset(npb, 0, sizeof(npb));
            for (int j = 0; j < co&&p[j] <= b; j++) {
                ll q = a/ p[j];
                if (q*p[j] < a)q++;
                for (ll k = q; k*p[j]<= b; k++)
                    if (k!= 1)npb[k*p[j]- a] = 1;
            }
            for (int j = 0; j <= b - a; j++)
                if (!npb[j])ans++;
            printf("Case %d: %lld
", i, ans);
        }
    }
    return 0;
}
OJ-1197

    技能  表 打 二 度

    效果  在打了个小一点的素数表只后通过取倍数获得各种非质数,然后捡起剩下的质数并发射出去

知道和被接受完全是两回事_(:з」∠)_

原文地址:https://www.cnblogs.com/non-/p/10816094.html