题目加完整代码:
#include <iostream>
#include <vector>
using namespace std;
//每行输入一个数字 0 < N < 10 0000, 输出0 - N之间的所有质数,并且质数按个位数从大到小排列,个位数相同的按实际大小排列
vector<long long> vec;//用来存放所有的质数
void getPrime(long long val)
{
if (val < 2) return;
if (val == 2)
{
vec.push_back(2);
return;
}
for (int i = 2; i < val; i++)
{
int flag = true;
for (int j = 2; j <= sqrt(i); j++)
{
if (i % j == 0)
{
flag = false;
break;
}
}
if (flag)
{
vec.push_back(i);
flag = true;
}
}
}
void getPrime_2(long long val, long long temp)
{
for (int i = temp; i < val; i++)
{
int flag = true;
for (int j = 2; j <= sqrt(i); j++)
{
if (i % j == 0)
{
flag = false;
break;
}
}
if (flag)
{
vec.push_back(i);
flag = true;
}
}
}
void Sort_out(vector<long long>& val)
{
vector<vector<long long> > tmp = { {},{},{},{},{},{},{},{},{} };
vector<long long>::iterator it = val.begin();
while(it != val.end())
{
switch ((*it % 10))
{
case 1:
tmp[0].push_back(*it);
break;
case 2:
tmp[1].push_back(*it);
break;
case 3:
tmp[2].push_back(*it);
break;
case 4:
tmp[3].push_back(*it);
break;
case 5:
tmp[4].push_back(*it);
break;
case 6:
tmp[5].push_back(*it);
break;
case 7:
tmp[6].push_back(*it);
break;
case 8:
tmp[7].push_back(*it);
break;
case 9:
tmp[8].push_back(*it);
break;
}
it++;
}
vector<long long>::iterator head;
for (int i = 0; i < 9; i++)
{
head = tmp[i].begin();
while (head != tmp[i].end())
{
cout << *head << endl;
head++;
}
}
}
int main()
{
long long val;
long long temp = 0;//存放上一个N
cin >> val;
getPrime(val);
temp = val;
Sort_out(vec);
while (cin >> val)
{
if (val > temp)//如果新输入的N大于上一个则需要再次寻找更多的质数。
{
getPrime_2(val, temp);
temp = val;
}
else//否则删除多于的质数
{
while (vec.back() > val)
vec.pop_back();
temp = val;
}
Sort_out(vec);
}
return 0;
}