Python学习

九度题目1163:素数

这里分享的是一些我做过的4星、五星,以及我总是提交超过3次的题目。

题目描述:
输入一个整数n(2<=n<=10000),要求输出所有从1到这个整数之间(不包括1和这个整数)个位为1的素数,如果没有则输出-1。 输入: 输入有多组数据。 每组一行,输入n。 输出: 输出所有从1到这个整数之间(不包括1和这个整数)个位为1的素数(素数之间用空格隔开,最后一个素数后面没有空格),如果没有则输出-1。 样例输入: 100 样例输出: 11 31 41 61 71 我的记录(你可能看不懂): 1. 各种错误。判定到底是不是素数,返回的代表什么意思搞不清楚 2. 初始化一定要用for循环一遍 3. 赋初值到底在哪里赋,每一次循环开头 4. 输出的格式,输出为-1之后换行,总的最后又换行冲突

#include<iostream>
#include<cstdio>
#include<string.h>
#include<math.h>
using namespace std;
#define MAX 10000
int a[10002];
bool judge(int x){  //是素数吗?
    if(x<=1)
        return false;
    int bound=(int)sqrt((double)x)+1;//多加一,防止强转带来误差
    for(int i=2;i<bound;i++)
        if(x%i==0)
            return false;
    return true;
}
void init(){
    for(int i=0;i<MAX;i++){
        a[i]=0;
    }
    a[0]=1;
    a[1]=1;
    for(int i=2;i<=MAX;i++){ 
        if(a[i]==1)
            continue;
        else{
            if(!judge(i)){  //不是素数
                a[i]=1;
                for(int j=i*i;j<=MAX;j+=i){  //所有i的倍数标记为1
                    a[j]=1;
                }
            }
            //不是素数则保持初始值,为0
        }
    }
}
int main(){
    int n;
    init();
    bool isflag=false;
    while(cin>>n){
        isflag=false;
        for(int i=2;i<n;i++){
            if(a[i]==0&&(i%10==1)){
                if(isflag==false){
                    cout<<i;
                    isflag=true;
                }
                else
                    cout<<” “<<i;
            }
        }
        if(isflag==false)
            cout<<“-1”;
        cout<<endl;
    }
    return 0;
}
/**************************************************************
    Problem: 1163
    User: WZDCJ0206
    Language: C++
    Result: Accepted
    Time:10 ms
    Memory:1568 kb
****************************************************************/
Be the First to comment.

Leave a Comment

您的电子邮箱地址不会被公开。

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

皖ICP备2020019260号-2