抽奖
来源:互联网 发布:工具书网络出版总库 编辑:程序博客网 时间:2024/06/10 18:56
Description
现有一抽奖活动,参加抽奖的员工已经按照报名先后顺序进行了编号(编号从1开始)。抽奖办法如下:由一位特邀嘉宾随机抽取两个正整数m,n,然后将与整数m互素(互质)的员工编号按从小到大排成数列,这个数列中的第n项就是本次活动的特等奖获得者。
例如,m=6,n=9
则与m互素的递增数列为:1,5,7,11,13,17,19,23,25,29,…,
这个数列中第9项为25,则编号为25的员工为本次活动的特等奖获得者。
请编写一程序实现上述功能。
Input
第1行:一个整数T(1≤T≤10)为问题数。
接下来有T行,对应每个问题有1行,每行有两个由一个空格分隔的正整数m,n(1≤m,n≤50000)。
Output
对于每个问题,输出一行问题的编号(0开始编号,格式:case #0: 等)。
然后对应每个问题在一行中输出那个特等奖获得者编号。
Sample Input
3
20 7
105 1000
98 3666
Sample Output
case #0:
17
case #1:
2186
case #2:
8553
#include<stdio.h>#define N 500000int count=0;int list[N];void init(int n){ int i,y[N],j,n1,c; //y数组存放n的约数 for(i=0;i<N;i++) y[i]=list[i]=0; for(i=2;i<n;i++) //求n的约数 if(n%i==0) list[i]=1; j=0; for(i=2;i<n;i++) if(list[i]==1) //将n的约数赋给y数组 y[j++]=i; n1=j; //记录约数的个数 c=0; //倍数累加 for(i=0;i<N;i++) list[i]=1; list[0]=0; for(j=0;j<n1;j++) //每个约数对应删去其中的倍数 for(c=1;c*y[j]<N;c++) list[c*y[j]]=0; j=0; for(i=0;i<N;i++) //删除数组中的空格 if(list[i]!=0) list[j++]=i;// n1=j;// for(i=0;i<100;i++)// printf("%d ",list[i]);}int main(){ int T,m,n; scanf("%d",&T); while(T--) { scanf("%d%d",&m,&n); init(m); printf("case #%d:\n",count); printf("%d\n",list[n-1]); } return 0;}
0 0
- 抽奖
- 抽奖
- 抽奖
- 抽奖
- 抽奖
- 抽奖
- 抽奖
- 抽奖
- 抽奖
- 抽奖
- 抽奖
- 抽奖
- 抽奖
- 抽奖
- 抽奖
- 抽奖
- 抽奖
- 抽奖
- Cannot load php5apache2_4.dll into server解决办法;
- Oracle一些基本系统表解释
- 初识FFmpeg
- 动画—Core Animation初步学习三:关键帧动画
- 数据结构之向量
- 抽奖
- 安卓应用反编译(一)-APK包的结构
- Python 适合用于做什么
- AFNetworking框架的使用和Cocoapods的安装使用
- Inventor API: 如何在工程图里显示装配不同详细等级(LOD)的重量
- 线性表之顺序表
- 18. 4Sum
- 漫谈递归:递归的思想
- 装饰模式