CE: 求素数

求0~N内的素数。(N<=100000)

输入
N

输出
[0~N]之间的所有素数,一个素数占一行。

样例输入 Copy
100
样例输出 Copy
2
3
5
7
11
13
17
19
23
29
31
37
41
43
47
53
59
61
67
71
73
79
83
89
97

//#include<iostream>
//#include<algorithm>
//#include<cstring>
//#include<cmath>
//using namespace std;
///*
// 思路1):因此判断一个整数m是否是素数,只需把 m 被 2 ~ m-1 之间的每一个整数去除,如果都不能被整除,那么 m 就是一个素数。
//思路2):另外判断方法还可以简化。m 不必被 2 ~ m-1 之间的每一个整数去除,只需被 2 ~  根号m 之间的每一个整数去除就可以了。
//如果 m 不能被 2 ~  间任一整数整除,m 必定是素数。例如判别 17 是是否为素数,只需使 17 被 2~4 之间的每一个整数去除,
//由于都不能整除,可以判定 17 是素数。
//原因:因为如果 m 能被 2 ~ m-1 之间任一整数整除,其二个因子必定有一个小于或等于 ,另一个大于或等于 。
//例如 16 能被 2、4、8 整除,16=2*8,2 小于 4,8 大于 4,16=4*4,4=√16,因此只需判定在 2~4 之间有无因子即可。
//*/
//int main(){
//    int n = 0,k,j;
//    scanf("%d",&n); 
//    bool f;
//    for(j = 2; j <= n; j++){
//        f = true;
//        k = (int)sqrt((double)j);//此处求根简化计算,只需使j与 2到 根号m 相除即可 
//        for(int i = 2; i <= k; i++){ 
////        for(int i = 2; i <= j - 1; i++){//这样也可以,使j与 2到j-1 相除 
//            if(j % i == 0){
//                f = false;
//                break;
//            }
//        }
//        if(f){
//        printf("%d\n",j);
//        }    
//    }
//    return 0;
//}

CF: 水仙花数

春天是鲜花的季节,水仙花就是其中最迷人的代表,数学上有个水仙花数,他是这样定义的:
“水仙花数”是指一个三位数,它的各位数字的立方和等于其本身,比如:153=1^3+5^3+3^3。
现在要求输出所有在m和n范围内的水仙花数。

输入
两个整数m和n(100<=m<=n<=999)。

输出
要求输出所有在给定范围内的水仙花数,就是说,输出的水仙花数必须大于等于m,并且小于等于n,如果有多个,则要求从小到大排列在一行内输出,之间用一个空格隔开;
如果给定的范围内不存在水仙花数,则输出no。

样例输入 Copy
300 380
样例输出 Copy
370 371

水仙花数作为一个经典题目,我目前知道的就有3种解法,下面贴其中一种解法

//#include<iostream>
//#include<algorithm>
//#include<cstring>
//#include<cmath>
//using namespace std;
///*
// 
//*/
//int main(){
//    int n = 0,m = 0,count;
//    while(scanf("%d %d",&m,&n) != EOF){
//        count = 0;
//        for(int i = m; i <= n; i++){
//            int a = i % 10;//求个位数的值 
//            int b = i / 10 % 10;//求十位数的值
//            int c = i / 100 % 10;//求百位数的值
//            if((a * a * a + b * b * b + c * c * c) == i){
//                printf("%d ",i);
//                count ++;
//            } 
//        } 
//        if(count == 0){
//            printf("no");
//        }else{
//            printf("\n");
//        }
//    }
//    return 0;
//}

CG: 人见人爱 A ^ B

求A^B的最后三位数表示的整数。说明:A^B的含义是“A的B次方”

输入
输入数据包含多个测试实例,每个实例占一行,由两个正整数A和B组成(1<=A,B<=10000),如果A=0, B=0,则表示输入数据的结束,不做处理。

输出
对于每个测试实例,请输出A^B的最后三位表示的整数,每个输出占一行。

样例输入 Copy
1 1
7 7
3 7
0 0
样例输出 Copy
1
543
187

//#include<iostream>
//#include<algorithm>
//#include<cstring>
//#include<string.h>
//#include<cmath>
//using namespace std;
///*
// 
//*/
//int main(){
//    int a = 0,b = 0;
//    while(scanf("%d %d",&a,&b),a&&b){
//        if(a == 0 && b != 0){
//            printf("0\n");
//        }
//        if(a != 0 && b == 0){
//            printf("1\n");
//        }
//        if(a != 0 && b != 0){
//            int s = a;
//            int t = b - 1;//a^b就是a * (b - 1)个a
//            while(t--){
//                s = s * a;//s*t个a
//                s %= 1000;//此处取余原因有二:一是一个数对1000取余可以得到后三位(可以类推%100后两位) 
//                // 二是不希望等到s乘完很大之后才进行这步,可能导致溢出,借助%1000降低s长度而不改变后三位结果 
//            }
//            printf("%d\n",s); 
//        }
//        
//    }
//    return 0;
//}


沐小轲
9 声望0 粉丝

C++初学者