筛选法的C语言实现筛选法程序步骤

筛选法的C语言实现筛选法程序步骤,第1张

先解释一下筛选法的步骤:

<1>先将1挖掉(因为1不是素数)。

<2>用2去除它后面的各个数,把能被2整除的数挖掉,即把2的倍数挖掉。

<3>用3去除它后面的各数,把3的倍数挖掉。

<4>分别用5…各数作为除数去除这些数以后的各数。

上述 *** 作需要一个很大的容器去装载所有数的集合,只要满足上述条件,即2的倍数大于1的全部置0,3的倍数大于1的全部置0,丛或旅4的倍数大于1的全部置0.。。渗凳。一团携直到这个数据集合的末尾,这样一来不为0的数就是素数了,然后按下标在里面进行查找就好了

用筛法求100以内的素数辩兆:

#include<stdio.h>

int main()

{

int a[101],i,j

for(i=2i<=100i++)

a[i]=1

for(i=2i<=10i++)

for(j=i+ij<=100j+=i)

a[j]=0

printf("100以携铅租内的素数:\n")

for(i=2i<=100i++)

if(a[i])printf("激让%d ",i)

printf("\n")

getch()

return 0

}

主要是CalcWord和WriteWord 函数,仔细研究吧,别浪费我的心血:

#include <stdio.h>

#include <conio.h>

#include <string.h>

#include <ctype.h>

#include <math.h>

struct WORD_FOUND

{

char szWord[256]

int nCount

}

WORD_FOUND g_WordFound[1000]={{"",0}}

int g_nMatch=0

int CalcWord(char *szFile)

{

char szText[1024]

char szWord[512]

FILE * fp

int i

if ((fp=fopen(szFile,"或猛r"))==NULL)

{

printf("森团肆file not found")

return -1

}

while(fgets(szText,sizeof(szText)-1,fp))

{

char *tmp=szText,*end=szText+strlen(szText)

char *endChr

while (tmp<end)

{

while ((*tmp==' '||*tmp=='\n'||*tmp=='\t'||!isalpha(*tmp))&&*tmp) tmp++

endChr=tmp

while (*endChr&&*endChr!='\n'&&*endChr!='\r'&&*endChr!=' ')

{

if (!isalpha(abs(*endChr)))

break

endChr++

}

memset(szWord,0,sizeof(szWord))

strncpy(szWord,tmp,endChr-tmp)

bool bFound=false

for (i=0i<g_nMatchi++)

{

if (strcmp(g_WordFound[i].szWord,szWord)==0)

{

g_WordFound[i].nCount++

bFound=true

break

}

}

if (!bFound&&strlen(szWord)>0)

{

strcpy(g_WordFound[g_nMatch].szWord,szWord)

g_WordFound[g_nMatch].nCount++

g_nMatch++

}

tmp=endChr

if (tmp>=end) break

}

}

return 0

}

int WriteWord(char *szFile,int nAppearance)

{

int i

FILE *file=fopen(szFile,"w")

if (!file) return -1

for (i=0i<g_nMatchi++)

{

if (g_WordFound[i].nCount>=nAppearance)

{

fwrite(g_WordFound[i].szWord,1,strlen(g_WordFound[i].szWord),file)

fwrite("\n",1,1,file)

printf("%s = %d\n",g_WordFound[i].szWord,g_WordFound[i].nCount)

}

}

if (file) fclose(file)

return 0

}

int main()

{

int i

if (CalcWord("in.txt")!=0)

{

printf("此轿Calculate word failed\n")

return 0

}

WriteWord("out.txt",10)

for (i=0i<g_nMatchi++)

{

printf("%s = %d\n",g_WordFound[i].szWord,g_WordFound[i].nCount)

}

getch()

return 0

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12515852.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存