用C语言求1-100的素数,麻烦会的帮我分析一下
发布网友
发布时间:2022-05-26 15:47
我来回答
共4个回答
热心网友
时间:2023-10-25 11:21
//方法一:循环判断,能否被大于2的数整除即可。(快10年没有写C了,我手头没有编译器,你自己debug一下)
include <stdio.h>
main() {
int i=0, j=0, c=100,isPrimeNo=0;
for (i = 3; i < c; i++) {
isPrimeNo=1;
for (j = 2; j < i; j++) {
if (i % j == 0) {
isPrimeNo=0;
break;
}
}
if(isPrimeNo == 1)
printf(" %d |", i);
}
}
===========================================================
===========================================================
===========================================================
方法二,定义一个数组,依次按顺序填写自然数,然后把合数依次去掉即可。
我这里用java测试了一下:求1000万以内的素数,也才5~6S,就出来了。
public class PrimeNumber {
static int count = 1000000;
static int all[] = new int[count + 1];
public static void main(String[] args) {
PrimeNumber rn = new PrimeNumber();
rn.initCount();
rn.specialRemove();
for (int i = 2; i < count; i++)
rn.remove(i);
rn.printcount(true);
}
/**
* 打印结果:
* @param simpleMode :打印方式,true:仅仅打印素数.false:按照自然数顺序打印.合数的位置为0.
*/
private void printcount(boolean simpleMode) {
int c = 0;
for (int i = 1; i < count + 1; i++) {
if (simpleMode && (all[i] != 0)) {
System.out.print(all[i] + "\t");
c++;
if (c % 10 == 0)
System.out.print("\n");
} else if (!simpleMode) {
System.out.print(all[i] + "\t");
c++;
if (c % 10 == 0)
System.out.print("\n");
}
}
}
//初始化
private void initCount() {
all[0] = 0;
for (int i = 0; i < count + 1; i++) {
all[i] = i;
}
}
//Remove special values:0,1
private void specialRemove() {
all[0] = 0;
all[1] = 0;
}
//移掉c的倍数
private void remove(int c) {
for (int i = 2; i < count; i++) {
if (i * c > count)
break;
all[i * c] = 0;
}
}
}
热心网友
时间:2023-10-25 11:21
#include<stdio.h>
void main()
{
int a,b,k;
for(a=2;a<=100;a++)
{
for(b=2;b<a;b++)
{
k=0;
if(a%b==0)
{
k++;
break;
}
}
if(k==0)
printf(" %d ",a);
}
}
热心网友
时间:2023-10-25 11:21
先写一个子函数,用来判断一个数是否素数,再从1判断100
bool fun(int n)
{
int i;
if n== 1 || n == 2
return true
for i=2; i<n; i++
if n%i == 0
break;
if i == n
return true;
else
return false
}
再从1判断到100
main()
int i;
for i=1; i<=100; i++
if fun(i) printf(%d, i);
热心网友
时间:2023-10-25 11:22
#include<stdio.h>
bool prime(int n)
{
int i;
if(n==1)return 0;
for(i=2;i*i<=n;i++)
{
if(n%i==0)return 0;
}
return 1;
}
void main()
{
int i,n,a,b;
scanf("%d",&n);
while(n--)
{
scanf("%d%d",&a,&b);
for(i=a;i<=b;i++)
{
if(prime(i))printf("%d ",i);
}
printf("\n");
}
}