890 词
题目描述质数寂寞了很久,这次他们不甘于寂寞,主动出击,寻找自己的后代,无情阻碍它们的合数原来竟然全是质数的后代,因为合数可以由质数相乘结合而得。已知如果一个合数由两个质数相乘而得,那么我们就叫它是质数们的直接后代。现在,给你一系列自然数,判断它们是否是质数的直接后代。 输入第一行一个正整数T,表示需要判断的自然数数量  接下来T行,每行一个要判断的自然数  数据规模和约定 $$ 1< =T< =20 $$$$ 2< =要判断的自然数< =10^5 $$ 输出共T行,依次对于输入中给出的自然数,判断是否为质数的直接后代,是则输出Yes,否则输出No  样例输入123454 3 4 6 12 样例输出1234No Yes Yes No 题解12345678910111213141516171819202122232425262728293031#include<bits/stdc++.h>using namespace std;bool sushu(int x) { for (int i...
898 词
题目描述输出不少于100100组不同的本原勾股数: $1≤a≤b≤c≤103$,满足:$a2+b2=c2$且$gcd(a,b,c)=1$ 输入无 输出根据描述输出 样例输入1无 样例输出1233 4 55 12 13....以下省略 你不必输出完全一样,输出不少于100组不同的勾股数,就可以了 题解123456789101112131415161718192021222324252627282930313233#include<iostream>#include <set>#include <algorithm>using namespace std;struct GG { int x, y, z; GG(int x, int y, int z) : x(x), y(y), z(z) { } bool operator<(const GG &g) const { if (x != g.x)return x < g.x; ...
944 词
题目描述给定一个大于1,不超过2000000的正整数n,输出欧拉函数,\phi(n)的值。如果你并不了解欧拉函数,那么请参阅提示。 输入在给定的输入文件中进行读入: 一行一个正整数n。  输出将输出信息输出到指定的文件中: 一行一个整数表示\phi(n)。 样例输入17 样例输出16 提示欧拉函数\phi(n)是数论中非常重要的一个函数,其表示1到n之间,与n互质的数的个数。显然的,我们可以通过定义直接计算\phi(n)。 当然,\phi(n)还有这么一种计算方法。 首先我们对n进行质因数分解,不妨设n={p_1}^{a_1} * {p_2}^{a_2} * … *{p_k}^{a_k} (这里a^b表示a的b次幂,p_1到p_k为k个互不相同的质数,a_1到a_k均为正整数),那么 \phi(n)=n(1-(1/p_1))(1-(1/p_2))….(1-(1/p_k)) 稍稍化简一下就是 \phi(n)=n(p_1-1)(p_2-1)…(p_k-1)/(p_1*p_2*…*p_k) 计算的时候小心中间计算结果...
878 词
题目描述为什么1小时有60分钟,而不是100分钟呢?这是历史上的习惯导致。 但也并非纯粹的偶然:60是个优秀的数字,它的因子比较多。 事实上,它是1至6的每个数字的倍数。即$1,2,3,4,5,6$都是可以除尽$60$。 我们希望寻找到能除尽1至n的的每个数字的最小整数m。 如果这个数很大,请输出对$1000000007$取模后的结果。 输入只有一个数n(1<=n<=10000). 输出输出m对1000000007取模的结果。 样例输入14 样例输出112 提示数论 题解123456789101112131415161718192021222324252627282930313233#include <iostream>#include <map>using namespace std;typedef long long LL;LL MOD = 1000000007L;map<int, int> M;inline bool prime(int n) { if (n == 2) return t...
742 词
题目描述n的因子数你一定知道啦,比如6有因子1,2,3,6 我们就说$div(6)=4$现在我们换一个问题,我们希望计算$n!$拥有多少个不同的因子,比如$3!=6$所以我们应该输出$4$ 输入每行只有一个正整数n$(1<=n<=100)$ 输出输出n!对应的不同因子数,结果可能很大,请用64位整数存储 样例输入13 样例输出14 提示整数的质因子分解 题解123456789101112131415161718192021222324252627282930#include<iostream>using namespace std;using ll = long long;const int maxn = 1000 + 1;char is_prime[maxn];ll primes[maxn], k = 0;ll n;void fill() { for (ll i = 2; i <= n; i++)is_prime[i] = 1; for (ll i = 2; i <= n / ...
489 词
C++12345678910111213141516171819202122232425262728#include <iostream>const int MAXSIZE=10000;using namespace std;void factorial(int n) { int result[MAXSIZE]; result[0] = 1; int pos = 0; for (int i = 1; i <= n; ++i) { int carry = 0; for (int j = 0; j <= pos; ++j) { int tmp = result[j] * i + carry; result[j] = tmp % 10; carry = tmp / 10; } while (carry > 0) { result[++pos]...
1.4k 词
题目描述给出n个圆的圆心和半径,相交的圆算在同一组中,如圆1和圆2和圆3相交,则圆1,2,3在同一组中。求总共有几组圆。 输入多组输入,第一行输入n,表示有n$(0<=n<=1000)$个圆,接下来n行,每行输入 圆心坐标 x,y,半径$r$ (都是int型) 输出对每组输入输出总共圆的组数 样例输入1234542 0 10 2 1-2 0 10 -2 1 样例输出14 题解1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768import java.util.Scanner;public class Main { static int[] F = new int[1010]; public static void main(String[] args) { Scanner cin = new Scan...
1.6k 词
题目描述由某个集合上的一个偏序得到该集合上的一个全序,这个操作被称为拓扑排序。偏序和全序的定义分别如下: 若集合X上的关系R是自反的、反对称的和传递的,则称R是集合X上的偏序关系。 设R是集合X上的偏序,如果对每个x,y∈X必有xRy或yRx,则称R是集合X上的全序关系。 由偏序定义得到拓扑有序的操作便是拓扑排序。 拓扑排序的流程如下: 1. 在有向图中选一个没有前驱的顶点并且输出之; 2.从图中删除该顶点和所有以它为尾的弧。 重复上述两步,直至全部顶点均已输出,或者当前图中不存在无前驱的顶点为止。后一种情况则说明有向图中存在环。 采用邻接表存储有向图,并通过栈来暂存所有入度为零的顶点,可以描述拓扑排序的算法如下: 在本题中,读入一个有向图的邻接矩阵(即数组表示),建立有向图并按照以上描述中的算法判断此图是否有回路,如果没有回路则输出拓扑有序的顶点序列。 输入输入的第一行包含一个正整数n,表示图中共有n个顶点。其中n不超过50。 以后的n行中每行有n个用空格隔开的整数0或1,对于第i行的第j个整数,如果为1,则表示第i个顶点有指向第j个顶点的有向边,0表示没有i指向j的有...
1.3k 词
题目描述最近小哼迷上了《龙门镖局》,从恰克图到武夷山,从张家口到老河口,从迪化到佛山,从蒙自到奉天,迤逦数千里的商道上,或车马,或舟楫,或驼驮,或肩挑,货物往来,钱财递送,皆离不开镖局押运。商号开在哪里,镖局便设在哪里。古代镖局的运镖,就是运货.也就是现代的物流。镖局每到-一个新地方开展业务,都需要对运镖途中的绿林好汉进行打点。 好说话的打点费就比较低,不好说话的打点费就比较高。 现已知城镇地图如下,项点是城镇编号,边上的值表示这条道路上打点绿林好汉需要的银子数。 输入第一行有两个数n和m,n表示有n个城市,m表示有m条道路。n,m 的范围小于100 接下来的m行,每行形如“a b c”用来表示一条道路,意思是城市a到城市b需要花费的银子数是C。 输出最少的银子数 样例输入123456789106 92 4 113 5 134 6 35 6 42 3 64 5 71 2 13 4 91 3 2 样例输出119 提示Prim算法,Kruskal算法 题解123456789101112131415161718192021222324252627282930313233343536...
1.3k 词
题目描述机房里有若干台电脑,其中有一些电脑已经相互连接。如果A和B通过网线相连,并且B与C也通过网线相连,那么即便A和C之间没有直接的网线相连,也可以认为A和C是相连的。由于机房里的布线比较乱,并不是所有电脑都相互连通,请问在不变动当前布线情况下,最少要购买几条网线才能使得机房所有电脑都两两连通。  输入多组数据。每组数据第一行为整数N,M。N是电脑数量,M是机房已布置好的网线数量。接下来M行,每行为整数A,B。表明A,B之间通过一条网线直接相连。这里可以认为网线是不分方向的,即A->B等价于B->A。(0 < N <= 200,0 <= M <= 10000,0 <= A,B <= N 。) N=0和M=0为输入结束,不需要处理。  输出每组一个整数,即最少还要购买几根网线。 样例输入1234564 21 22 34 01 00 0 样例输出123130 提示n个电脑编号为1~n 题解1234567891011121314151617181920212223...