① c語言求超級素數
給你個完整的:
#include<stdio.h>
intisprim(intn)
{
inti;
if(n<2)return0;
for(i=2;i*i<=n;++i)
if(n%i==0)return0;
return1;
}
intisssp(intn)
{
if(!isprim(n))return0;
while(n/10)
if(!isprim(n/=10)) return0;
return1;
}
intmain()
{
inti;
intcnt=0;
intmaxp;
printf("從100-9999的超級素數有: ");
for(i=100;i<10000;++i)
{
if(isssp(i))
{
++cnt;
maxp=i;
printf("%8d",i);
if(cnt%5==0)
printf(" ");
}
}
printf(" 總共有:%d個 ",cnt);
printf("最大的是:%d ",maxp);
return0;
}
② C語言編寫超級素數
超級素數是指從個位起刪除0位、1位、2位……直到只剩最後1位都是素數的十進制正整數。可以自定義一個素數判斷函數,對某一正整數n及從個位起每刪除1位的新數逐一進行判斷,都是素數的則是題解。以下代碼先要求輸入正整數n,輸出2~n之間的所有超級素數:
#include"stdio.h"
intprime(intn){//判斷素數,素數返回0,否則返回1
inti;
if(n>2&&!(n&1)||n<2)
return1;
for(i=3;i*i<=n;i+=2)
if(!(n%i))
return1;
return0;
}
intmain(intargc,char*argv[]){
intn,i,t;
printf("Inputn(intn>1)... n=");
if(scanf("%d",&n)!=1||n<2){
printf("Inputerror,exit... ");
return0;
}
for(i=2;i<=n;i++){
for(t=i;t;t/=10)//從低位刪除0位,1位...直到只剩1位都是素數的為超級素數
if(prime(t))
break;
if(!t)
printf("%d",i);
}
printf(" ");
return0;
}
運行樣例如下:
③ C語言編程題:超級素數。
/**************************************
大體的思路:先求出1000-9999之間的素數,然後在這些素數中
找出前1、2、3、4位都是素數的數即為超級素數,每次找到一個
超級素數都與之前的超級素數加和,並且記錄超級素數個數的變數加1,
並與之前找到的超級素數比較,記錄最大的超級素數。
最後輸出就可以了。
************************************/
#include <stdio.h>
#define MAX 10000
int prime[MAX] ; //prime數組記錄1到9999每個數是否為素數,例如prime[9999]==1表示9999是素數
//searchPrime是找出1到9999之間的所有素數,並保存到prime數組
void searchPrime()
{
int i, j ;
for(i = 0; i < MAX; i++)
prime[i] = 1 ; //所有元素初始化為1,即假定都是素數
prime[0] = 0 ;//0不是素數
prime[1] = 0 ;//1不是素數
//下面開始篩選素數
for(i = 2; i*i < MAX; i++)
{
if(prime[i]) //如果i是素數,把它的倍數都篩掉
for(j = 2*i; j < MAX; j+=i)
{
prime[j] = 0 ; //j是i的倍數,因此j最起碼有一個因子是i,所以不可能是素數
}
}
}
int main()
{
int sum ; //sum記錄超級素數的和
int i ;
int count ; //count記錄超級素數的個數
int max ; //max記錄最大的超級素數
int n ;
scanf("%d", &n) ;
searchPrime() ; //初始化Prime數組
count = 0 ;
sum = 0 ;
max = 0 ;
for(i = 1001; i <= n; i++)
{
if(prime[i] && prime[i/1000]
&& prime[i/100] && prime[i/10]) //說明i是超級素數
{
sum += i ;
count++ ;
if(max < i)
max = i ;
}
}
printf("%d\n%d\n%d\n", count, sum, max) ;
return 0 ;
}
//寫的倉促,只驗證了9999,其他的數字並未驗證,有問題再反饋吧。
④ 用c語言編程求超級素數的思路是什麼
是要求一個數為超級素數還是求某個范圍內所有超級素數?
另外超級素數有兩種定義,一種是從高位去掉還是素數. 一種是從低位去掉還是素數. 這個會影響程序演算法.
如果是求一個數是否為超級素數, 那麼先判斷是否為素數, 如果是, 那麼再根據定義, 從高位或者低位一個個去掉, 每去掉一位, 判斷一次是否為素數. 如果是則繼續. 最終得到的如果都是素數, 那麼就是超級素數.
求某個范圍內所有超級素數, 可以遍歷該范圍內所有數, 逐一判斷.
如果范圍比較大,也可以先求出所有個位素數,然後根據定義增加位, 從而打表得到所有小於最大值的超級素數, 再反查最小值以上的.
⑤ c語言求超級素數
邏輯亂得有點厲害,如
for(n=2;n<m;n++)
if(m%n==0)
break;
這里的break;只結束for(n=2;...這個循環,還在前一個for(k=0;k<3;k++)循環中;可是break;就意味著m已經不是素數了,那麼整個m所在的3位數就不是超級素數,還有什麼必要繼續做for(k=0;k<3;k++)這個循環?這種題比較好的結構是弄一個素數判斷函數,不斷用原數和它不斷除以10的數調用,都返回「真」的就是超級素數,否則不是。代碼如下——
#include"stdio.h"
intprime(intn){//素數
inti;
if(n>2&&!(n&1)||n<2)
return0;
for(i=3;i*i<=n;i+=2)
if(!(n%i))
return0;
return1;
}
intmain(intargc,char*argv[]){
inti,j,k;
for(k=0,i=101;i<=9999;i+=2){
for(j=i;j>0;j/=10)
if(!prime(j))
break;
if(!j)
printf(++k%10?"%5d":"%5d ",i);
}
if(k%10)
printf(" ");
return0;
}
運行結果: