#include<stdio.h> #include"math.h" int howmany (int x,int y) { int p=x,q=y; int a[100000]; int c[100000]; int t=0,i,j,m,n,chej,g=0; int k=0,s=0,b=0,h=0; for(i=2;i<=q;i++) { //找出全部質數,存入到一個數組中 for(j=2;j<= (int)sqrt(i);j++) { if(i%j==0) {break;} } if(j > (int)sqrt(i)) { a[k++]=i; printf("質數的值:%d\n",i);//打印出質數的值 } } printf("打印出質數的個數:%d\n",k);//打印出質數的個數 //從a[]數組中任意選擇兩個數相乘,若是他們的乘積在x與y的範圍之間 就可判斷這個數是半質數 for(m=0;m<k;m++) { for(n=0;n<k;n++) { chej=a[m]*a[n]; if(p<=chej&&q>=chej) { printf("半質數爲:%d\n",chej);//數字有重疊的部分,還須要去重 c[s++]=chej; } } } t=s; //取出c數組中重複的項 for(g=0;g<s;g++) { for(h=g+1;h<s;h++) { if(c[h]==c[g]) { t--; } } } printf("半質數的個數爲:%d\n",s); printf("去重後半質數的個數爲:%d\n",t); return t; } //start 提示:自動閱卷起始惟一標識,請勿刪除或增長。 int main() { printf("%d",howmany(1,80000)); } //end //提示:自動閱卷結束惟一標識,請勿刪除或增長。
質數是你們熟知的概念,咱們定義一個半質數的概念:若是一個數剛好是兩個質數的乘積(能夠相同),則稱它爲半質數。前幾個半質數是 4, 6, 9, 10, 14, 15, 21, 22, 25, 26。咱們的問題是,輸入兩個正整數x<=y,問[x,y]之間有多少個半質數?數組
輸入:x,y函數
輸出:[x,y]之間有多少個半質數。spa
輸入數據範圍 1<=x<=y<=2000000。blog
注意:1:聲明int g=h=0;時編譯環境報錯,2:for(int i=0;i<m:i++)時報錯io
挑戰失敗 howmany函數超過80000就運行超時編譯