题目描述
输入一个整数n(2<=n<=10000),要求输出所有从1到这个整数之间(不包括1和这个整数)个位为1的素数,如果没有则输出-1。
输入描述:
输入有多组数据。 每组一行,输入n。
输出描述:
输出所有从1到这个整数之间(不包括1和这个整数)个位为1的素数(素数之间用空格隔开,最后一个素数后面没有空格),如果没有则输出-1。
示例1
输出
复制11 31 41 61 71
#include<iostream> #include<cstdio> #include<cstring> #include<stdlib.h> #include<algorithm> using namespace std; bool a[10010]= {0}; int b[10000]; int x=0; void sushu(int n) { for(int i=2; i<n; i++) { if(a[i])continue; b[x++]=i; for(int j=i*i; j<n; j+=i) a[j]=true; } } int main() { int n; cin>>n; sushu(n); int ct=0; for(int i=0; i<x; i++) { if(b[i]%10==1) ct++; } if(ct==0) cout<<-1; else { for(int i=0; i<x; i++) { if(b[i]%10==1) { cout<<b[i]; ct--; if(ct!=0) cout<<' '; } } } return 0; }
//这个题真的是简单的,但是求素数的时候我还是遇到了一个小问题,就是第二层循环,应该是从i*i那个地方开始开始标记,并且j+=i这样,比i*2开始快乐2ms,求素数,如果是合数则被标记为true;