c++作业存档

c++作业存档

  1. 美素数

问题描述 :

小明对数的研究比较热爱,一谈到数,脑子里就涌现出好多数的问题,今天,小明想考考你对素数的认识。

问题是这样的:一个十进制数,如果是素数,而且它的各位数字和也是素数,则称之为“美素数”,如29,本身是素数,而且2+9 = 11也是素数,所以它是美素数。

给定一个区间,你能计算出这个区间内有多少个美素数吗?

输入:

第一行输入一个正整数T,表示总共有T组数据(T <= 10000)。

接下来共T行,每行输入两个整数L,R(1<= L <= R <=
1000000),表示区间的左值和右值。

输出:

对于每组数据,先输出Case数,然后输出区间内美素数的个数(包括端点值L,R)。

每组数据占一行,具体输出格式参见样例。格式:Case(空格)#(组数):空格(结果)

样例输入:

3
1 100
2 2
3 19

样例输出:

Case #1: 14
Case #2: 1
Case #3: 4

代码:



#include<iostream>

#include<cmath>

using namespace std;

 

int prime(int x)

{

    if (x == 1)return 0;

    int i, k = sqrt((double)x);

    for (i = 2; i <= k; i++)if (x%i == 0)return 0;

    return 1;

}

int b_prime(int x)

{

    int y = 0;

    if (!prime(x))return 0;

    while (x)

    {

         y
+= (x % 10);

         x /= 10;

    }

    if (!prime(y))return 0;

    return 1;

}

 

int main()

{

    int T, L, R, s, i, t;

    cin
>> T;

    t
= T;

    while (T--)

    {

         s
= 0;

         cin>>L>>R;

         for (i = L; i <= R; i++)

         {

             if (b_prime(i))s++;

         }

         cout<<"Case #"<<t-T<<": "<<s<<endl;

    }

    return 0;

}}

  1. 加法逆与乘法逆

加法逆和乘法逆是密码学中的两个概念.设有两个正整数m、n,满足m<n且n¹0的条件,则m在n内的加法逆k(k为小于n且不为0 的正整数)满足 (m+ k)mod n=0, m在n内的乘法逆l(l小于n且不为0)满足 (m*l) mod n =1。请编写程序,输入两个正整数n、m,计算输出m在n内的加法逆与乘法逆,如不存在,则输出0.

Input

多组测试输入,每行输入两个数字 n m(n>m,且n≠0,m≠0)

Output

对于每组输入,输出对应的加法逆k与乘法逆 n

Sample Input

3

10 3

11 6

12 4

Sample Output

7 7

5 2

8 0

Hint:

输入说明:

2 测试组数

10空格3换行 表示n,m

输出说明:

7空格7换行

6空格2换行

代码:




#include <iostream>

using namespace std;

 

int main(){

         int
times=0;

         cin
>>times;

         while(times){

                  int
n=0,m=0,k=0,l=0;

                  cin>>n>>m;

                  for(int
i=1;i<n;i++){

                          if(i!=m
&& (i+m)% n ==0){k=i;}

                          if(i!=m
&& (i*m)% n ==1){l=i;}

                  }

                  cout<<k<<"
"<<l<<endl;

 

                  times--;

         }

         return
0;

}



  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值