/*
ID: hywhuan1
LANG: C++
TASK: sprime
*/
#include <fstream>
#include <iostream>
#include <cstdlib>
#include <string>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <sstream>
using namespace std;
const int maxn = 100000000;
int p[100000008], in, out;
int check(int n)
{
string ss, st;
stringstream stream;
stream << n;
stream >> ss;
int len = ss.length();
for (int i = len; len >= 1; len--)
{
st = ss.substr(0, len);
stringstream stream(st);
int stnum;
stream >> stnum;
if (p[stnum] == 0)
return 0;
}
return 1;
}
ofstream fout("sprime.out");
ifstream fin("sprime.in");
int main()
{
memset(p, 0, sizeof(p));
p[2] = 1;
for (int i = 3; i <= maxn; i += 2)
{
p[i] = 1;
}
for (int i = 3; i <= maxn; i++)
if (p[i] == 1)
for (int j = i + i; j <= maxn; j += i)
{
p[j] = 0;
}
fin >> in;
for (int i = pow(10, in - 1); i < pow(10, in); i++)
{
if (check(i) == 1)
fout << i << endl;
}
return 0;
}
Ich denke, es ist eine sehr einfache Idee, zuerst eine Tabelle zu erstellen und dann ein Urteil zu fällen. Unter Win 10 funktioniert es gut, aber unter USACO funktioniert es nicht
> Run 1: Execution error: Your program (`sprime') exited with signal
#11 (segmentation violation [maybe caused by accessing memory out
of bounds, array indexing out of bounds, using a bad pointer
(failed open(), failed malloc), or going over the maximum
specified memory limit]). The program ran for 0.000 CPU seconds
before the signal. It used 4180 KB of memory.
Ich verstehe den Grund wirklich nichtAnbei finden Sie die chinesische Übersetzung dieser Frage: http://www.nocow.cn/index.php...
Begrüßen Sie alle Experten, die mir, einem Schwächling, mit Antworten helfen können
内存溢出了,你开的数组太大了。
估计 USACO 限制了内存大小