1013 數素數 ——C/C++實現
阿新 • • 發佈:2018-11-24
題目
1013 數素數 (20 point(s))
令 Pi 表示第 i 個素數。現任給兩個正整數 M≤N≤104,請輸出 PM 到 PN 的所有素數。
輸入格式:
輸入在一行中給出 M 和 N,其間以空格分隔。
輸出格式:
輸出從 PM 到 PN 的所有素數,每 10 個數字佔 1 行,其間以空格分隔,但行末不得有多餘空格。
輸入樣例:
5 27
輸出樣例:
11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103
演算法
演算法的思路是這樣的,對得到的素數進行計數,一直計算到第N個為止,從M個開始輸出。演算法難度不大。但是始終有一個測試點4通過不了,暫時還未能解決!
程式碼
C++
#include <iostream> #include <cmath> using namespace std; int main(){ int M,N,cnt=0,k=0,j,flag=0; cin>>M>>N; for(int i=2;i<=100000;i++){ for(j=2;j<=sqrt(i);j++){ if(i%j==0) break; //i 不是素數 } if(j>sqrt(i)){ //i 是素數 cnt++; if(cnt>=M&&cnt<N){ k++; printf("%d%c",i,k%10==0?'\n':' '); } if(cnt==N){ cout<<i; flag=1; } } if(flag==1) break; } return 0; }
C
//PAT1013V1 #include <stdio.h> #include <math.h> int main(){ int m,n,i,j,k=0; scanf("%d %d",&m,&n); int a[10000]={0}; for(i=2;i<10000;i++){ for(j=2;j<=sqrt(i);j++){ if(i%j==0) //not prime break; } if(j>sqrt(i)){ //prime a[k++]=i; // printf("%d",i); } } for(i=m-1;i<n;i++){ printf("%d%c",a[i],((i-m+2)%10==0)||(i==n-1)?'\n':' '); //if(j=0;j<10;j++) } return 0; }