c语言prime函数怎么用_C语言 要发就发

adc3a7f4b6f6efb55fba229d432abc34.png点击上方“蓝字”关注我们 1c9cf2b7d52d22131b0e7d06219e614a.png

愉快的一天,不得不做的三件事:

        种田,锄地,整代码!!!

【题目】

868f5eb3057a9515cf7d674e11f4913b.png

“1898——要发就发”。请将不超过1993的所有素数从小到大排成第一行,第二行上的每个数都等于它右肩上的素数之差。编程用函数实现并求出:第二行数中是否存在这样的若干个连续的整数,它们的和恰好是1898?假设存在的话,又有几种这样的情况?

第1行:2  3  5  7  11  13  17 ……1979  1987  1993

第2行:1  2  2  4   2   4    ……        8     6

【设计思路】

假设第1行中的素数为n[1]、n[2]、n[3]……n[j]…… , 第2行中的差值为m[1]、m[2]、m[3]……m[j]…… , 其中m[j]=n[j+1]-n[j],则第2行连续j个数的和为

SUM =m[1]+m[2]+m[3]+…+m[j]

      =(n[2]-n[1])+(n[3]-n[2])+(n[4]-n[3])+…+(n[j+1]-n[j])

        =n[j+1]-n[1]

由此题目就变成了:在不超过1993的所有素数中是否存在这样两个素数,它们的差恰好是1898。

若存在,则第2行中必有所需整数序列,其和恰为1898. 由分析可知,因为任意素数与2的差一定为奇数,所以不用考虑2.

bc096d15997cbb3ce8205c691aa65671.png

【代码分析】

int prime(int n)

{

    int i;

    long k;

    k = sqrt(n)+1;

    for(i=2;i

        if(n%i==0)

        return 0;

    return 1;

}

prime() 为判断是否为素数的函数,

若是,返回 1;若不是,返回 0.

for(i=3;i<=1993;i+=2)

{

if(prime(i))

num[j++]=i;

}

从3到1993,将所有的素数全部存在数组num[]中.

for(j--; num[j]>1898; j--)  

    {

        for(i=0; num[j]-num[i]>1898; i++); 

        if(num[j]-num[i] == 1898) 

           {

                  k++; 

            printf("第%d种情况:%-4d - %-4d = 1898\n",k,num[j],num[i]);

           }

    }

依次匹配数组里的数字,若两数之差为1898,则k++,并打印此时的两位数字.

【代码展示】

C语言   要发就发

#include

#include

#define N 1000 

int prime();

void fa(); 

int main()

{

fa();

return 0;

}

int prime(int n)

{

int i;

long k;

k = sqrt(n)+1;

for(i=2;i

if(n%i==0)

return 0;

return 1;

}

void fa()

{

int i,j=0,num[N],k=0;

printf("-------欢迎进入操作界面-------\n\n");

for(i=3;i<=1993;i+=2)

{

if(prime(i))

num[j++]=i;

}

for(j--; num[j]>1898; j--)  

    {

        for(i=0; num[j]-num[i]>1898; i++); 

        if(num[j]-num[i] == 1898) 

           {

            k++; 

            printf("第%d种情况:%-4d - %-4d = 1898\n",k,num[j],num[i]);

   }

    }

}

【运行结果展示】

ba0fcc66e1520c1d3732c37b0a05a68b.png

19235d2c46cf3f88321145dc73ed03ca.gif

IT 农工要回家休息了,我们下期再见吧

记得点击“在看”进行收藏哦

04258cebc24f4e3ce16eac21c7f5763b.png

往期精彩

C语言 捕鱼和分鱼

C语言 求π的近似值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值