题目
小七是一个很可爱很努力的女孩子。她对大数的运算非常感兴趣,在学习了几天之后,终于精通了大数的加减乘除。但是自从她学会了 JAVA ,她觉得大数实在是太简单太无聊了,因为运用 JAVA 中 BigInteger 大整数类,可以轻松实现大数的加减乘除。某一天她突然发现,很多大数的题目的数据都有规律。这些数都是由比他小的某个数重复构成,比如说 121212 由 12重复构成 ,233233 ,由233重复构成,而1231231并不是由123重复构成。无聊的小七终于找到了乐子,她想要找到每个大数是由哪个比它小的数重复构成。算法刚入⻔的小七无法解决这个问题,于是她求助于你。
输入
一行 一个正整数n(n<=10^1000000)。
输出
一行
如果存在多种,输出最小的满足题意的数;
如果不存在,则输出-1.
输入
121212
输出
12
输出超限(substr用错了)
#include<string>
#include<iostream>
#include<cmath>
using namespace std;
bool jud_unpri[1000009];
int main() {
int i, j;
for (i = 2; i < sqrt(1000009); i++) {
if(!jud_unpri[i])
for (j = i * i; j <= 1000009; j+=i) {
jud_unpri[j] = true;
}
}
/*for (i = 2; i < 1000; i++) {
if (!jud_pri[i])
cout << i << " ";
}*/
string str;
string cmp1;
string cmp2;
cin >> str;
if (!jud_unpri[str.size()])
{
cout << -1 << endl;
return 0;
}
else {
for (i = 1; i <= str.size() / 2; i++)
{
//cout << "i=" << i << endl;
if (str.size() % i != 0)
continue;
cmp1 = str.substr(0, i);//获得长度为i的子字符串;
//cout << "cmp1:" << cmp1 << endl;
for (j = 1; j <= str.size() / i-1; j++) {
/*cout << "j=" << j << endl;
cout << "i*j=" << i * j << endl;
cout << "i*j+i-1=" << i * j + i - 1 << endl;*/
cmp2 = str.substr(i*j,i*j);
//cout << "cmp2:" << cmp2 << endl;
if (cmp1.compare(cmp2) != 0)
break;
}
if (j == str.size() / i)
{
cout << cmp1 << endl;
return 0;
}
}
if (i > str.size() / 2) {
cout << -1 << endl;
return 0;
}
}
}
ac
#include<string>
#include<iostream>
#include<cmath>
using namespace std;
bool jud_unpri[1000009];
int main() {
int i, j;
for (i = 2; i < sqrt(1000009); i++) {
if (!jud_unpri[i])
for (j = i * i; j <= 1000009; j += i) {
jud_unpri[j] = true;
}
}
/*for (i = 2; i < 1000; i++) {
if (!jud_pri[i])
cout << i << " ";
}*/
string str;
string cmp1;
string cmp2;
cin >> str;
if (!jud_unpri[str.size()])
{
cout << -1 << endl;
return 0;
}
else {
for (i = 1; i <= str.size() / 2; i++)
{
//cout << "i=" << i << endl;
if (str.size() % i != 0)
continue;
cmp1 = str.substr(0, i);//获得长度为i的子字符串;
//cout << "cmp1:" << cmp1 << endl;
for (j = 1; j <= str.size() / i - 1; j++) {
/*cout << "j=" << j << endl;
cout << "i*j=" << i * j << endl;
cout << "i*j+i-1=" << i * j + i - 1 << endl;*/
cmp2 = str.substr(i * j, i);
//cout << "cmp2:" << cmp2 << endl;
if (cmp1.compare(cmp2) != 0)
break;
}
if (j == str.size() / i)
{
cout << cmp1 << endl;
return 0;
}
}
if (i > str.size() / 2) {
cout << -1 << endl;
return 0;
}
}
}