❶ 用c語言編寫求質數的程序
//我分別寫出了求素數和判斷素數的程序
/*
//判斷一個數是否為素數
#include<stdio.h>
#include<math.h>
int
isprime(int);
void
main()
{
int
inumber;
printf("請輸入一個非負整數:
");
scanf("%d",&inumber);
if(isprime(inumber))
printf("%d是素數!\
",inumber);
else
printf("%d不是素數!\
",inumber);
}
int
isprime(int
a)
{
int
i;
for(i=2;i<=sqrt(a);i++)
if(a%i==0)
return
0;
return
1;
}
*/
/*****************************************************/
//求某個正整數以內的素數
#include"stdio.h"
#include"math.h"
int
main(void)
{
int
count,i,m,n,num;
printf("請輸入所求范圍(正整數):
");
scanf("%d",&num);
count=0;//count記錄素數的個數
printf("%d以內的素數為:\
",num);
for(m=2;m<=num;m++)
{
n=sqrt(m);
for(i=2;i<=n;i++)
{
if(m%i==0)
break;
}
if(i>n)//如果m是素數
{
printf("%6d",m);
count++;
if(count%10==0)//count為10的倍數時換行
printf("\
");
}
}
printf("\
");
return
0;
}
❷ C語言中求質數過程是怎樣的
判斷一個數是不是素數(就是你說的質數),用下面的方法(篩選法):
從2開始,那麼2的倍數就不是素數;
然後是3,那麼3的倍數就不是素數;
然後是5(4已經被排除了),那麼5的倍數就不是素數。
以此類推。下面給出篩選法的代碼(判斷10以內的素數有幾個,4個)
#include<stdio.h>
intmain(void)
{
inti,s,k,count=0;
for(i=100;i<=200;i++)
{
k=sqrt(i);
for(s=2;s<=k;s++)
{
if(i%s==0)break;
}
if(s==k+1)
count++;
}
printf("%d
",count);
for(i=100;i<=200;i++)
{
k=sqrt(i);
for(s=2;s<=k;s++)
{
if(i%s==0)break;
}
if(s==k+1)
printf("%d",i);
}
return0;
}
寫的這么詳細,不採納我,好傷心。
❸ 關於C語言求質數的問題用單鏈表查找N以內的所有質數,輸出時是俺從小到大順序,N是通過鍵盤輸入的任意
S1,用戶輸入N,創建鏈表結構體,使用MALLOC申請空間
S2,從2循環到N,逐個判斷是否質數,然後不是質數的就跳過去,是質數的就將上一個鏈表的指針鏈接至此,並且以這個單元為起始指針
S3,輸出鏈表
判斷質數的源程序網上很多,自己挑一個寫成子程序就行。
❹ 關於C語言找質數
#include<stdio.h>
#include<math.h>
void main()
{
int i, j, n, l, m = 0;
printf("你需要小於多少的質數:\t");
scanf("%d", &n);
for(i = 2; i < n; i++)
{
l = 1;
for(j = 2; j <= sqrt((double)i); j++)
{
if(i % j == 0){l = 0; break;}
}
if(l == 1){
printf("%d ", i);
m++;
}
}
printf("一共有%d個這樣的樹", m);
}
❺ 一個c語言的流程圖 是關於判斷素數的 看不太懂 麻煩解釋一下過程
它的演算法是:
輸入n後,讓i取值在2~n/2就循環,逐一比較看n能否被i整除;如果能被其中任何一個i的值整除,提前退出循環,否則i的值+1後繼續。
當退出循環後檢測,如果i的值<=n/2就說明它是提前退出循環的,n不是素數;否則說明n是素數。
至於i循環的范圍,最大的是直接根據素數的定義,檢測2~(n-1)
稍改進一點的,因為大於n/2的肯定不能整除,就只檢測2~n/2
更優一點的,是根據n如果有除1和它自身之外的其它因子,至少有一個在2~√n之間,那麼 i 的循環范圍就只要 2~√n 就可以了。
❻ C語言求1到n所有質數
按照題目要求編寫的程序如下(見圖)
❼ 請把你們所知道的C語言中找質數的演算法都編出來告訴我,拜託了!
//以前朋友寫的一段C的,效率很高,我自己寫的不及他
//Problem: Prime Ring Problem
//00:00.71 436K
//戴帽子的 2004-04-22
//=============================
#include <iostream>
#include <ctime>
#include <fstream>
using namespace std;
/*
#define cout out
ofstream fout("time.txt");
ofstream fin("hziee.txt");
ostream& out = fin;
ostream& timeout = fout;
*/
ofstream fin("hziee.txt");
int kase;
bool P[21][21];
short in[21];
short result[20];
short N;
bool Prime(int n)
{
int i;
for(i=2; i<n; i++) {
if(n%i==0)
return false;
}
return true;
}
void initial()
{
int i,j;
kase = 0;
for(i=1; i<21; i++){
for(j=i; j<21; j++) {
P[i][j] = Prime(i+j);
P[j][i] = P[i][j];
}
}
}
void Print()
{
int i;
for(i=0; i<N-1; i++)
fin<<result[i]<<" ";
fin<<result[i]<<endl;
}
void hziee(int k)
{
int i;
if(k == N)
{
if(P[result[0]][result[N-1]])
Print();
return;
}
for(i=result[k-1]%2 + 1; i<=N; i += 2) {
if(in[i])
continue;
if(P[result[k-1]][i]) {
result[k] = i;
in[i] = true;
hziee(k+1);
in[i] = false;
}
}
}
int main()
{
int i;
clock_t start, end, start1, end1;
start = clock();
initial();
end = clock();
cout<< double(end - start) / CLK_TCK <<endl;
in[1]=true;
result[0]=1;
cin>>N;
start1 = clock();
fin<<"Case "<<++kase<<":"<<endl;
for(i=2; i<=N; i++)
in[i] = false;
if(N%2 == 0)
hziee(1);
fin<<endl;
end1 = clock();
fin<< double(end1 - start1) / CLK_TCK <<endl;
return 0;
}
❽ 如圖,C語言題目,這兒的leap=1有什麼用
leap=1是默認該數是素數,如果後面的條件m%i==0成立,則leap=0,則m不是素數,break後,m+=2再次進入循環。