素数--北航200年机试

来源:互联网 发布:深入理解linux内核4.4 编辑:程序博客网 时间:2024/05/01 03:20
题目描述:

输入一个整数n(2<=n<=10000),要求输出所有从1到这个整数之间(不包括1和这个整数)个位为1的素数,如果没有则输出-1。

输入:

输入有多组数据。
每组一行,输入n。

输出:

输出所有从1到这个整数之间(不包括1和这个整数)个位为1的素数(素数之间用空格隔开,最后一个素数后面没有空格),如果没有则输出-1。

样例输入:
100
样例输出:

11 31 41 61 71

方法一、根据要求找

#include <stdio.h>#include <stdlib.h>#include<math.h>#include<string.h>//思路,输入一个整数,将小于他其各位我1的素数存起来int prime[10001];int main(){    int n;    int i,j;    while(scanf("%d",&n)!=EOF)    {        int primesize=0;//不同位置初始化不一样        for(i=11; i<n; i+=10)        {            int k= (int)sqrt(i)+1;            int flag=1;//falg为0代表不是素数            for (j=2; j<=k; j++)            {                if(i%j==0)                {                    flag=0;                    break;                }            }            if(flag==1)            {                prime[primesize++]=i;            }        }        if(primesize==0)        {            printf("-1\n");        }        else        {            int m;            for(m=0; m<primesize-1; m++)            {                printf("%d ",prime[m]);            }            printf("%d\n",prime[primesize-1]);        }    }    return 0;}
方法二 把所有素数找出来,再一一对应

# include<stdio.h>int prime[10000];int primeSize;int mark[10001];//mark[x]为1代表其为非素数void init(){for (int i = 0; i < 10001; i++){mark[i] = 0;}primeSize = 0;for (int i = 2; i < 10001; i++){if (mark[i] == 1) continue;prime[primeSize++] = i;for (int j = i*i; j < 10001; j += i){mark[j] = 1;}}}int main(){init();int n;while (scanf("%d", &n)!=EOF){int isOutPut = 0;for (int i = 0; i < primeSize; i++){if (prime[i] < n&&prime[i] % 10 == 1){if (isOutPut == 0){isOutPut = 1;printf("%d", prime[i]);}else printf(" %d", prime[i]);}}if (isOutPut == 0){printf("-1\n");}else printf("\n");}return 0;}


0 0
原创粉丝点击