C语言 输出任意两个数之间的质数

本文介绍了一个从C语言移植到Java的程序,该程序用于打印指定范围内的所有素数。通过对比两种语言的实现方式,展示了如何在不同语言中使用条件判断和循环结构。同时介绍了异或交换技巧及其实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<stdio.h>
static int isPrime(int n);
void main()
{
    int low,high;
    int flag=1;
    while(flag==1)
    {
        printf("输出两个数(一空格分割):");
        scanf("%d %d",&low,&high);
        /*
            //3.利用异或运算来交换数据
    //  利用的思想原理是:一个数异或同一个数两次,结果还是那个数,而且不会超出int范围
        unsigned int a=60;         //0011 1100
        unsigned int b=13;         //0000 1101
        printf("交换之前:a=%d,b=%d\n",a,b);   //输出a,b的值
        a=a^b;                     //a=a^b=0011 0001
        b=a^b;                     //b=a^b=0011 1100
        a=a^b;                     //a=a^b=0000 1101
        printf("交换之后:a=%d,b=%d\n",a,b);   //输出a,b的值
        */
        //如果low输入的值大了,交换,保证low的值小于high
        if(low>high)
        {
            low=low^high;
            high=low^high;
            low=low^high;
        }
        int i;
        static int first=0;
        int count=0;
        for(i=low;i<high;i++)
        {

            if(isPrime(i)==1)//如果i是质数
            {
                //输出逗号,第一个逗号屏蔽
                if(first==1)
                {
                    printf(",");
                    //每十个束素数一行
                    if(++count%10==0)
                    printf("\n");
                }
                else first=1;

                 printf("%5d",i);//输出素数
            }
        }printf("。");
        printf("\n继续[1/0]?:");
        scanf("%d",&flag);
    }

}
static int isPrime(int n)//判断n 是不是质数
{
    if(n<=1)
        return -1;
    int ISPrime=1;//默认是质数,用1表示
    int i;
//   for(i=2;i<=n/2;i++)
//一个数 n 如果是合数,那么它的所有的因子不超过sqrt(n)  
  for(i=2;i<=sqrt(n);i++) 
{
if(n%i==0)//如果找到一个其他的因数
{
ISPrime=0;//不是质数
  break;
}
 }
return ISPrime;
}

测试:
输出两个数(一空格分割):2 234
    2,    3,    5,    7,   11,   13,   17,   19,   23,   29,
   31,   37,   41,   43,   47,   53,   59,   61,   67,   71,
   73,   79,   83,   89,   97,  101,  103,  107,  109,  113,
  127,  131,  137,  139,  149,  151,  157,  163,  167,  173,
  179,  181,  191,  193,  197,  199,  211,  223,  227,  229,
  233。
继续[1/0]?:1
输出两个数(一空格分割):234 56
   59,   61,   67,   71,   73,   79,   83,   89,   97,  101,
  103,  107,  109,  113,  127,  131,  137,  139,  149,  151,
  157,  163,  167,  173,  179,  181,  191,  193,  197,  199,
  211,  223,  227,  229,  233。
继续[1/0]?:1
输出两个数(一空格分割):567 334
  337,  347,  349,  353,  359,  367,  373,  379,  383,  389,
  397,  401,  409,  419,  421,  431,  433,  439,  443,  449,
  457,  461,  463,  467,  479,  487,  491,  499,  503,  509,
  521,  523,  541,  547,  557,  563。
继续[1/0]?:0

java实现:

package Ctojava;

import java.util.Scanner;

public class printPrimeN_M
{
	public static void main(String[] args)
	{
		int low,high;
		Scanner scanner=new Scanner(System.in);
		low=scanner.nextInt();
		high=scanner.nextInt();
		if(low>high)
		{
			low^=high;high^=low;low^=high;
		}
		boolean printComma=false;
		for(int i=low;i<high;i++)
		{
			if(isPrime(i))
			{
				if(printComma)
					System.out.print(",");
				else
					printComma=true;
				System.out.print(i);
				
			}
		}
	}
	public static boolean isPrime(int n)
	{
		if(n<=1)
			return false;
		for(int i=2;i<=Math.sqrt(n);i++)
		{
			if(n%i==0)//如果找到一个因数
				return false;//那就不是质数
		}
		//如果没有找到因数
		return true;//那就是
	}
}
测试:

1 100
2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值