社区讨论

MLE?

P7588双重素数(2021 CoE-II A)参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@loba2cqa
此快照首次捕获于
2023/10/29 17:37
2 年前
此快照最后确认于
2023/11/03 23:34
2 年前
查看原帖
CPP
#include <iostream>
#include <cmath>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 1e8, M = 5761455;
int n, l, r, t, ans;
bool pr[N+5];
int Prime[M+5];
int tot, num;
int sum(int n)//作用是求出每位之和
{
	int sum=0;
	while (n != 0)
	{
		sum += n%10;
		n /= 10;
	}
	return sum;
}
void prime()//线性筛出素数
{
	for (int i=2; i<=N; i++)
    {
        if (!pr[i])
            Prime[++tot]=i;
        for (int j=1; i*Prime[j]<=N; j++)
        {
            pr[i*Prime[j]] = true;
            if (!(i%Prime[j]))
                break;
        }
    }
    for (int i=1; i<=tot; i++)
        if (!pr[sum(Prime[i])])               
            Prime[++num] = Prime[i];
}
int main()
{
	scanf ("%d", &t);
	prime();
	while (t--)
	{
		scanf ("%d%d", &l, &r);
        ans = 0;
        for (int i=l; i<=r; i++)
    		if (upper_bound(Prime+1, Prime+num+1, i)-lower_bound(Prime+1, Prime+num+1, i) != 0)
                ans++;
 		//二分寻找答案
        printf ("%d\n", ans);
	}
	return 0;
}
码风奇特不管了
T了3个,M了1个。或许二分还可以写的更简洁一点,但是MLE让我很不敢相信……为什么单独那个点会空间超限?后来我改了一下
CPP
#include <iostream>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;
const int N = 1e8, M = 5761455;
int n, l, r, t, ans;
bool pr[N+1];
int Prime[M+1];
int tot, num;
int sum(int n)
{
	int sum=0;
	while (n != 0)
	{
		sum += n%10;
		n /= 10;
	}
	return sum;
}
void prime()
{
	for (int i=2; i<=N; i++)
    {
        if (!pr[i])
            Prime[++tot]=i;
        for (int j=1; i*Prime[j]<=N; j++)
        {
            pr[i*Prime[j]] = true;
            if (!(i%Prime[j]))
                break;
        }
    }
    for (int i=1; i<=tot; i++)
        if (!pr[sum(Prime[i])])               
            Prime[++num] = Prime[i];
}
int main()
{
	scanf ("%d", &t);
	prime();
	while (t--)
	{
		scanf ("%d%d", &l, &r);
        printf("%d\n", upper_bound(Prime+1, Prime+num+1, r)-Prime-(lower_bound(Prime+1, Prime+num+1, l)-Prime));
	}
	return 0;
}
然而TLE的事解决了,MLE的问题还是存在。。。
我不能理解的就是我开的数组,数组里面的内容都是差不多的嘛,为什么会单独一个点M掉?求大佬解释

回复

0 条回复,欢迎继续交流。

正在加载回复...