C语言作业(素数问题)

1、 定义函数判断n是否为素数。(40分)
2、调用上面的判断素数函数,输出[100,2001之问的素数。(30
分)
3、调用上面的判断素数函数,统计题【100,200]之间的素数个数。

/*1、 定义函数判断n是否为素数。(40分)/


/**1、 定义函数判断n是否为素数。(40分)*/
#include<stdio.h>
int prime(int x)
{
    int i;
    if(x==1)
    {
        return 0;
    }
    for(i=2;i<x;i++)  //这里是“<”而非“<=”.证明了从1到它本身-1都没有其他因数了
    {
        if(x%i==0)
          return 0;
    }
       return 1;
}
int main() {
  int n;
  printf("请输入一个数:\n");
  scanf("%d",&n);
  if(prime(n))
  {
    printf("%d是素数\n",n);
  }else
  {
    printf("%d不是素数\n",n);
  }
  return 0;
}

img


第二题:

#include<stdio.h>
int prime(int x)
{
    int i;
    if(x==1)
    {
        return 0;
    }
    for(i=2;i<x;i++)  //这里是“<”而非“<=”.证明了从1到它本身-1都没有其他因数了
    {
        if(x%i==0)
          return 0;
    }
       return 1;
}
int main() {
  int i;
  printf("[100-200]区间的素数如下:\n");
  for(i=100;i<200;i++){
    if(prime(i))
    {
        printf("%d ",i);
    }
  }
  return 0;
}

img


第三题:


#include<stdio.h>
int prime(int x)
{
    int i;
    if(x==1)
    {
        return 0;
    }
    for(i=2;i<x;i++)  //这里是“<”而非“<=”.证明了从1到它本身-1都没有其他因数了
    {
        if(x%i==0)
          return 0;
    }
       return 1;
}
int main() {
  int i,count=0;
  
  for(i=100;i<200;i++){
    if(prime(i))
    {
        count++;
    }
  }
  printf("[100-200]区间的素数个数为:%d\n",count);
  return 0;
}

img


#include <iostream>
#include <stdio.h>
using namespace std;
//判断一个数是否为素数的函数
int isPrime(int num)
{
    int i;
    if (num == 2)//2为最小素数
        return 1;
    if (num > 2)
    {
        for (i = 2; i < num; i++)
            if (num % i == 0)
            {
                break;//一旦判断不是,跳出循环
            }
        if (i == num)
            return 1;
    }
    return 0;
}

int main()
{
    printf("输出100-2001之间的素数:\n");
    for (int i = 100; i < 2001; i++)
    {
        if(isPrime(i))
            cout<<i<<endl;
    }
    int cnt = 0;
    for (int j = 100; j < 200; j++)
    {
        if (isPrime(j))
            cnt++;
    }
    printf("100-200之间的素数个数:%d\n", cnt);

#include <stdio.h>

int is_prime_number(int n)
{

   int i;

   int result = 1;

   if(n==1)

       return 0;

   for(i=2;i<n;i++)

   {

       if(n%i==0)

       {

           result = 0;

           break;

       }

   }

   return result;

}

int main()

{

   int n;

   printf("100以内的素数包括:\n");

   for(n=1;n<=100;n++)

   {

       if(is_prime_number(n))

       {

           printf("%d ",n);

       }

   }

   printf("\n");

   return 0;

}

你可以参照这个例子进行修改,改成100到200之间的,中间加个次数统计


#include<stdio.h>
 
int Sushu(int a);
int main()
{
    int n = 0, res = 0;
    int s = 0;
    for (n = 100; n < 200; n++)
    {
 
        res = Sushu(n);
        if (res == 1)
            printf("%4d", n);
            s++;
    }
 
    printf("\n100-200֮之间有%d个素数", s);
    system("pause");
    return 0;
}
 
int Sushu(int a)
{
    int i = 0;
 
    for (i = 2; i < a; i++)
    {
        if (a % i == 0)
        return 0;       //如果不是素数返回0
    }
    return 1;              //如果是素数返回1
}

#include<bits/stdc++.h>

bool aa(int n)//判断质数
{
    if(n<2)
    {
        return 0;
    }
    else
    {
        for(int i=2;i*i<=n;i++)
        {
            if(n%i==0)
            {
                return 0;
            }
        }
        
        return 1;
    }
}

int ans;//质数个数

int main()
{
    for(int i=2;i<=2001;i++)
    {
        if(aa(i))
        {
            if(i<=200)
            {
                ans++;
            }
            printf("%d ",i);
        }
    }
    printf("\n%d",ans);
    
    return 0;
}

参考代码,自行按需改写。
毕竟学程序语言编写调试程序是正道。


#include<stdio.h>
#include<math.h>

void sushu(int n);
int main()
{
    int a;
    printf("Pls input a number:");
    scanf("%d",&a);
    sushu(a);
    return 0;
}

void sushu(int n)
{
    int i;
    for(i=2;i<n;i++)
    {
        printf("%d %d ",n%i,i);
        if(n%i==0)
        {
            printf("%d 是素数",n);
            break;
        }
        else
        {
            printf("%d 是素数",n);
        }
    }
}

如有帮助,望采纳


//判断一个数是否为素数
int isPrime(int num)
{
    int i;
    if (num == 2)
        return num;
    if (num > 2)
    {
        for (i = 2; i < num; i++)
            if (num % i == 0)
            {
                break;//一旦判断不是,跳出循环
            }
        if (i == num)
            return num;
    }
}
int main()
{
    for (int i = 100; i < 2001; i++)
    {
        cout<<isPrime(i);
    }
    int cnt = 0;
    for (int j = 100; j < 200; j++)
    {
        if (isPrime(j))
            cnt++;
    }
    cout << "100-200之间的素数个数" << cnt << endl;
}


#include<stdio.h>
int ss(int a)
{
    if (a == 1)
        return 0;
    else
    {
        int i;
        for (i = 2; i < a; i++)
        {
            if (a % i == 0)
                break;
        }
        if (i == a)
            return 1;
        else
            return 0;
    }
}
int main()
{
    int p,sum=0;
    for (p = 100; p < 201; p++)
    {
        if (ss(p))
        {
            printf("%5d",p);
            sum++;
        }
    }
    printf("\n100`200之间的素数为:%d",sum);
   return 0;
}

img


#include <stdio.h>
//判断是否素数
int is_prime_number(int n)
{
   int i;
   if(n==1)
       return 0;
   for(i=2;i<n;i++)
   {
       if(n%i==0)
       {
           return 0;
       }
   }
   return n;
}
int main()
{
   int n;
   printf("100~200素数包括:\n");
   for(n=100;n<=200;n++)
   {
       if(is_prime_number(n))
       {
           printf("%d ",n);
       }
   }
   printf("\n");
   printf("100~200素数个数:");
   int count=0;
   for(n=100;n<=200;n++)
   {
       if(is_prime_number(n))
       {
           count+=1;
       }
   }
   printf("%d\n",count);
   return 0;
}
//特征法,直接调用TE_zheng函数即可;
#include<bits/stdc++.h>
using namespace std;

int is_SU_SHU(int num){//非遍历 
    if (num<=1){
        cout<<"非法参数:1和非正整数既不是质数,也不是素数"<<"\n";
    } 
    if (num==2||num==3||num==5){
        return true; //小于6的数中所有的素数 ; 
    }
    
    if (num==4){
        return false;//小于6的数中所有的非素数 ; 
    }
//    过滤掉 2/3 
    if (num%6==0||num%6==2||num%6==3||num%6==4){
        return false;//大于6的所有正数中,满足6i+0, 6i+2, 6i+3, 6i+4特征的数为非素数; 
    } 
    //6i+1,6i+5部分同时包涵素数和非素数 
    //6i+1:115 23 5 121 11 11  133 19 7 145 5 29 169 13 13 175 25 7  187 17 11
    //6i+5:119  125 143 155 161 185
    //过滤掉5的倍数和平方数 
    if(num%5==0||pow(sqrt(num),2)==num){
           return false;
    }
    
    //剩下的数值遍历验证; 
    for (int j =2;j<=sqrt(num); j++){
        if(num%j==0){
            return false;
        } 
    }
    return true;
}
int TE_zheng(int a,int b){    
    cout << "输出"<<a<<"-"<<b<<"之间的素数:" << endl;
    for (int i = a; i < b+1; i++)
    {
        if(is_SU_SHU(i))
        cout<<i<<"\n";
    }
    
    int cnt = 0;
    for (int j = a; j < b+1; j++)
    {
        if (is_SU_SHU(j))
            cnt++;
    }
    cout << "输出"<<a<<"-"<<b<<"之间的素数的个数:" <<cnt<< endl;
}
int main()
{
    TE_zheng(100,200);
}