c语言prime函数怎么用_C语言 要发就发
愉快的一天,不得不做的三件事:
????? ? 種田,鋤地,整代碼!!!
【題目】
“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.
【代碼分析】
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]);
? ?}
? ? }
}
【運行結果展示】
IT 農工要回家休息了,我們下期再見吧
記得點擊“在看”進行收藏哦
往期精彩
C語言 捕魚和分魚
C語言 求π的近似值
總結
以上是生活随笔為你收集整理的c语言prime函数怎么用_C语言 要发就发的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在 Windows 下如何关闭135/1
- 下一篇: python自然语言处理_python