随机函数 歌德巴赫猜想

来源:互联网 发布:生活中耐看的女生知乎 编辑:程序博客网 时间:2024/05/02 05:03

1.随机函数

每次运行产生不同的随机数,程序代码如下:

#include <stdlib.h>
#include <stdio.h>
#include <time.h>

int main(void)
{
 int i;
    time_t t;
    srand((unsigned) time(&t));
    printf("Ten random numbers from 0 to 99/n/n");
    for (i=0;i<10;i++)
  printf("%d/n",rand()%100);
    return 0;
}

   这时运行程序,会发现每次产生的随机数都不一样。
    那么为什么第一个程序一样而第二个程序不一样呢?
    第二个程序用到了一个新的函数srand,这个函数是给随机数产生一个随机种子(seed),函数原型是srand( (unsigned) time(NULL));
    time的值每时每刻都不同。所以种子不同,所以,产生的随机数也不同。
    所以说,要想产生不同的随机数,在使用rand之前需要先调用srand
    由于rand产生的随机数从0到rand_max,而rand_max是一个很大的数,那么如何产生从X~Y的数呢?
    从X到Y,有Y-X+1个数,所以要产生从X到Y的数,只需要这样写:
    k=rand()%(Y-X+1)+X;
    这样,就可以产生你想要的任何范围内的随机数了。

2.歌德巴赫猜想

实例介绍:编写程序,验证歌德巴赫猜想,任意大偶数为两个素数之和并输出这两个素数。(所谓大偶数是指从6开始的偶数)

程序代码:

#include <stdlib.h>
#include <stdio.h>
#include <time.h>

void even(int num);
int prime(int num);

int main(void)
{
 int num;
 printf("Please input a number(>=6)");
 scanf("%d",&num);
 if(num>6 && num%2==0)
 {
  even(num);
  printf("/n");
 }
 else
  printf("The %d isn't even number./n",num);
}

void even(int num)
{
 int i;
 for(i=2;i<num/2;i++)
  if(prime(i) && prime(num-i))
   printf("%d+%d=%d ",i,num-i,num);
}

int prime(int num)
{
 int i,k=num/2;
 for(i=2;i<=k;i++)
  if(num%i==0)
   return 0;
 return 1;
}

3.求整数n的全部素数因子

实例介绍:输出整数n的所有素数因子

程序代码:

#include <stdlib.h>
#include <stdio.h>
#include <time.h>

void factor(int num);
int prime(int num);

int main(void)
{
 int num;
 printf("Please input a number:");
 scanf("%d",&num);
 factor(num);
}

void factor(int num)
{
 int i=2;
 while(i<num)
 {
  if(num%i==0 && prime(i))
  {
   printf("%d ",i);
   num=num/i;
   continue;
  }
  i++;
 }
 
}

int prime(int num)
{
 int i,k=num/2;
 for(i=2;i<=k;i++)
  if(num%i==0)
   return 0;
 return 1;
}

4.求1-1000内的阶乘和数

实例介绍:一个正整数如果等于组成它的各位数字的阶乘之和,改整数被称为阶乘和数。例如:145=1!+4!+5!,则145是一个三位阶乘和数,统计所有的3位以内的阶乘和数。

程序代码:

#include <stdlib.h>
#include <stdio.h>

long jc(int num);

int main(void)
{
int a,b,c;
long m1,m2,n1,n2;
printf("The result is:");

for(a=1;a<=9;a++)
{
if(a==jc(a))
printf("%d ",a);
for(b=1;b<=9;b++)
{
m1=a*10+b;
n1=jc(a)+jc(b);
if(m1==n1)
printf("%ld ",m1);
for(c=1;c<=9;c++)
{
m2=m1*10+c;
n2=n1+jc(c);
if(m2==n2)
printf("%ld ",m2);
}
}
}
printf("/n");
}

long jc(int num)
{
int i;
long p=1;
for(i=1;i<=num;i++)
p=p*i;
return p;
}