練習1:哥德巴赫猜想
【題目描述】
哥德巴赫猜想的命題之一是:大于6 的偶數(shù)等于兩個素數(shù)之和。編程將6~100所有偶數(shù)表示成兩個素數(shù)之和。
【輸入】
(無)
【輸出】
分行輸出:
例如:
6=3+3
8=3+5
...
(每個數(shù)只拆開一次,請保證第一個加數(shù)最?。?br>
【輸入樣例】
(無)
【輸出樣例】
(無)
【來源】
#include <stdio.h>
int gc();
int sushu(int n);
int main()
{
int i;
for(i=6;i<=100;i=i+2)
{
gc(i);
}
return 0;
}
int gc(int n)
{
int i;
for(i=2;i<=n/2;i++)
{
if(sushu(i)==1&&sushu(n-i)==1)
{
printf("%d=%d+%d\n",n,i,n-i);
break;
}
}
}
int sushu(int n)
{
int i;
for(i=2;i<=n/2;i++)
{
if(n%i==0)
return 0;
}
return 1;
}
二進制分類
【題目描述】
若將一個正整數(shù)化為二進制數(shù),在此二進制數(shù)中,我們將數(shù)字1的個數(shù)多于數(shù)字0的個數(shù)的這類二進制數(shù)稱為A類數(shù),否則就稱其為B類數(shù)。
例如:
(13)10=(1101)2,其中1的個數(shù)為3,0的個數(shù)為1,則稱此數(shù)為A類數(shù);
(10)10=(1010)2,其中1的個數(shù)為2,0的個數(shù)也為2,稱此數(shù)為B類數(shù);
(24)10=(11000)2,其中1的個數(shù)為2,0的個數(shù)為3,則稱此數(shù)為B類數(shù);
程序要求:求出1~1000之中(包括1與1000),全部A、B兩類數(shù)的個數(shù)。
【輸入】
(無)
【輸出】
一行,包含兩個整數(shù),分別是A類數(shù)和B類數(shù)的個數(shù),中間用單個空格隔開。
【輸入樣例】
(無)
【輸出樣例】
#include <stdio.h>
int ejzfl();
int main()
{
int n,i,s1=0,s2=0;
for(i=1;i<=1000;i++)
{
if(ejzfl(i)==1)
s1++;
else
s2++;
}
printf("%d %d",s1,s2);
return 0;
}
int ejzfl(int n)
{
int a[1000],b[1000],i=0,j=0;
a[0]=n;
while(a[i]!=0)
{
a[i+1]=a[i]/2;
if(a[i]%2==1)
{
j++;
}
i++;
}
if(j>(i-j))
{
return 1;
}
else
{
return 0;
}
}