這個代碼是求3到100的雙素數,如果我要求[m,n]之間的素數該怎么改呢
#include <stdio.h>#include <stdlib.h>
#define N
void Siftprime(int a[], int n);
void DoublePrime(int a[],int n);
//篩法求素數
void Siftprime(int a[], int n)
{
int i,j,m
for (i=2;i<=n;i++)
{
a[i]=i;
}
for (i=2;i<=n;i++)
{
for (j=i+1;j<n;j++)
{
if (a[i]!=0&&a[j]!=0&&a[j]%a[i]==0)
a[j]=0;
}
}
}
void DoublePrime(int a[],int n)
{
int i;
for (i=m;i<n;i++)
{
if (a[i]!=0&&a[i+2]!=0)
printf("%4d/%d",i,i+2);
}
}
int main()
{
int a[N+1];
Siftprime(a,N);
DoublePrime(a,N);
return 0;
}
uj5u.com熱心網友回復:
搞錯了,代碼是這個:#include <stdio.h>
#include <stdlib.h>
#define N 100
void Siftprime(int a[], int n);
void DoublePrime(int a[],int n);
//篩法求素數
void Siftprime(int a[], int n)
{
int i,j;
for (i=2;i<=n;i++)
{
a[i]=i;
}
for (i=2;i<=n;i++)
{
for (j=i+1;j<n;j++)
{
if (a[i]!=0&&a[j]!=0&&a[j]%a[i]==0)
a[j]=0;
}
}
}
void DoublePrime(int a[],int n)
{
int i;
for (i=3;i<n;i++)
{
if (a[i]!=0&&a[i+2]!=0)
printf("%4d/%d",i,i+2);
}
}
int main()
{
int a[N+1];
Siftprime(a,N);
DoublePrime(a,N);
return 0;
}
uj5u.com熱心網友回復:
#include<stdio.h>
void main()
{
int m,n;
scanf("%d%d",&m,&n);
for (int j, i = m; i <= n; i++)
{
for (j = 2; j < i; j++)
{
if (i % j == 0)
break;
}
if(j==i)printf("%d ",i);
}
}
uj5u.com熱心網友回復:
看不懂
uj5u.com熱心網友回復:
供參考://用篩法求N之內的素數
#include<stdio.h>
int main()
{
int n;
bool prime[1000];
for(int i=0;i<1000;i++)
{
prime[i]=0;//假設所有數都是素數
}
scanf("%d",&n);
for(int i=2;i<=n;i++)
{
if(prime[i]==0)//每次將一個素數的所有倍數標記為非素數
{
for(int j=i*2;j<=n;j=j+i)//從二倍開始標記素數的倍數為非素數
{
prime[j]=1;
}
}
}
for(int i=2;i<=n;i++)
{
if(prime[i]==0)printf("%d\n",i);
}
//system("pause");
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/281784.html
標籤:C語言
下一篇:函式
