201lenovo-01-素数.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
201lenovo-01-素数.ppt

素数 郑途 2015-4-23 问题描述 ★实验任务 输入一个数,它是由三个1000 以内的质数相乘而得,要求从小到大输出这三个素数。 ★数据输入 输入n ★数据输出 输出三个质数。 输入示例输出示例 30 2 3 5 对问题的理解和分析 输入的数n可以因式分解为3个整数,每个质数都是1000以内的质数,只需找出1000以内的所有质数,从最小的质数开始判断,如果能被n整除,则输出,并把商赋值给n,继续循环即可。 用素数筛选法找质数 for(i=2;i1000;i++){ ?? ????????if(a[i]==0){ ?? //a[i]==0 i为素数 否则为不为素数 ????????????b[k++]=i; ?? //找到素数赋值给b数组 ????????????for(j=i;j1000;j+=i){ ?? ????????????a[j]=1; ?? ????????????} ?? ????????} ?? ????} ?? 代码 #includestdio.h ?? int?main() ?? { ?? ????long?n; ?? ????int?a[1000]={0},b[500]; ?? ????int?i,j,k=1; ?? ????scanf(%d,n); ?? ????for(i=2;i1000;i++){ ?? ????????if(a[i]==0){ ?? ????????????b[k++]=i; ?? ????????????for(j=i;j1000;j+=i){ ?? ????????????a[j]=1; ?? ????????????} ?? ????????} ?? ????} ?? 修理 ★实验任务 Fresh 住在一个美丽的小村庄。那里空气清新风景优美。唯一的不足就是台风多发。一天,台风来了,fresh 住的房子遭到毁坏,有个1*L 的洞。然后fresh 请vegetable 来修理房子。已知vegetable 带来n 块1*li 的木板和一把锯子。请问vegetable 如何修理才能使所需的木板数目最少。 ★数据输入 第一行输入两个整数L(0L100000000)和n(0=n=100000) 第二行有n 个整数,表示每块木板的长度。 ★数据输出 输出最少需要的木板数.如果不能修好输出impossible。 输入示例输出示例 5 3 1 3 2 2 对问题的理解和分析 题目就是求最少的木板数,使木板的长度和大于等于洞的长度即可。 只需将木板长度从小到大进行排序,然后将 洞的长度不断减去木板的长度(从长的木板开始)直到洞的长度小于等于0 排序可以用归并排序或qsort排序 用sort排序会发生超时,由于sort最坏的时间复杂度为o(n2),数据使sort达到了最坏情况。 排序代码 qsort法 int cmp(const void*a,const void*b){ return *(int*)a-*(int*)b; } qsort(a,n,sizeof(int),cmp); 排序代码 归并排序法 void Merge( long a[], int start, int mid , int end) { int i = start,j = mid + 1,k = start; while(i = midj = end) { if(a[i] = a[j]) { b[k++] = a[i++]; } else { b[k++] = a[j++]; } } 代码(以qsort为例) #includestdio.h #includealgorithm using namespace std; int a[100001]; int cmp(const void*a,const void*b){ return *(int*)a-*(int*)b; } int main() { long l,n; scanf(%d%d,l,n); for(int i = 0; i n; i++) scanf(%d,a+i); qsort(a,n,sizeof(int),cmp); * * int a[1000]={0},b[500]; ????for(i=1;ik;i++) ?? ????????if(n%b[i]==0) ??

文档评论(0)

shbky123 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档