1007. 素数对猜想 (20)

来源:互联网 发布:javascript中PoSt 编辑:程序博客网 时间:2024/05/29 12:15

1007. 素数对猜想 (20)

/*coded by indere 2017/06/18*///让我们定义 dn 为:dn = pn + 1 - pn,其中 pi 是第i个素数。显然有 d1 = 1 且对于n > 1有 dn 是偶数。//“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。//现给定任意正整数N(< 10^5),请计算不超过N的满足猜想的素数对的个数。////输入格式:每个测试输入包含1个测试用例,给出正整数N。//输出格式:每个测试用例的输出占一行,不超过N的满足猜想的素数对的个数。//输入样例://20//输出样例://4//分析://判断一个数是否为素数,从大到小一次除以比它的平方根小的素数,如果都不能整数,则为素数//在个程序里面我创了一个链表来存储所有的素数。#include<stdio.h>#include<stdlib.h>typedef struct Prime {      /*素数链表节点*/    int num;                /*数字*/    struct Prime *next;     /*下一个节点*/}PrimeNum;void getPrime(PrimeNum *head, int num);     /*根据输入的数据,创建素数链表*/int judgePrime(PrimeNum *head, int num);    /*判断数num是否为素数*/void printPrimenum(PrimeNum *head);         /*输出满足条件的素数对个数*/int main() {    int end;    scanf("%d", &end);    PrimeNum *head = (PrimeNum *)malloc(sizeof(PrimeNum));    head->num = 0;    head->next = NULL;    getPrime(head,end);    printPrimenum(head);    return 0;}void getPrime(PrimeNum * head, int num) {    if (num <= 1)        return;    head->num = 2;    head->next = NULL;    PrimeNum *p = head;    for (int i = 3; i < num + 1; i++) {        if (judgePrime(head, i)) {      /*是素数,则加入链表*/            PrimeNum *preme = (PrimeNum *)malloc(sizeof(PrimeNum));            preme->num = i;            preme->next = NULL;            p->next = preme;            p = preme;        }    }    p = NULL;}int judgePrime(PrimeNum *head, int num) {    PrimeNum *p = head;    while (p) {        if ((p->num * p->num <= num) && (num % (p->num)) == 0) {            return 0;        }else if((p->num * p->num > num)){            break;        }        p = p->next;    }    p = NULL;    return 1;}void printPrimenum(PrimeNum *head) {    int sum = 0;    int temp = head->num;    PrimeNum *p = head->next;    while (p) {        if (p->num - temp == 2)            sum++;        temp = p->num;        p = p->next;    }    printf("%d\n", sum);    p = NULL;}
原创粉丝点击