求1到100内两个数互质的概率的c语言程序

求1到100内两个数互质的概率的c语言程序,第1张

互质和质数没有联系吧,互质就是最大公约数为1,比如4 9 互质

#include <iostream>

#include <stdioh>

#include <stdlibh>

using namespace std;

int gcd(int a,int b)

{

if(b==0)return a;

else return gcd(b,a%b);

}

int main()

{

int i,j,s;

double p;

s=0;

for(i=1; i<=100; i++)

{

for(j=i+1; j<=100; j++)

{

if(gcd(j,i)==1)s++;

}

}

printf("%d\n",s);

p=double(s)/(10099/2);

printf("%lf\n",p);

return 0;

}

希望采纳么么哒~(≧▽≦)/~

Option Explicit

Private Sub Form_Load()

    Dim arr(9) As Integer

    Dim i As Integer, j As Integer

    Dim strOut As String

    '随机生成10个数字

    Randomize

    For i = 0 To UBound(arr)

        arr(i) = Int(Rnd 89) + 10

        strOut = strOut & arr(i) & " "

    Next

    

    DebugPrint "十个数字为:" & strOut

    

    For i = 0 To UBound(arr)

        For j = i + 1 To UBound(arr)

            If getMaxCD(arr(i), arr(j)) = 1 Then

                '如果两数字最大公约数为1,则为互质数

                DebugPrint arr(i) & "和" & arr(j) & "为互质数"

            End If

        Next

    Next

End Sub

'返回两数的最大公约数

Private Function getMaxCD(ByVal num1 As Long, ByVal num2 As Long) As Long

    Dim temp, a, b

    If num1 < num2 Then

        temp = num1

        num1 = num2

        num2 = temp

    End If

    a = num1

    b = num2

    While b <> 0

        temp = a Mod b

        a = b

        b = temp

    Wend

    getMaxCD = a

End Function

(1)两个数都是合数(两数相差较大),小数所有的质因数,都不是大数的约数,这两个数是互质数。(2)两个数都是合数(两数相差较小),这两个数的差的所有质因数都不是小数的约数,这两个数是互质数。(3)两个数都是合数,大数除以小数的余数(不为“0”且大于“

1”)的所有质因数,都不是小数的约数,这两个数是互质数。如

462与

221462÷221=2……20,20=2×2×5。2、5都不是221的约数,这两个数是互质数。(4)减除法。如255与182。255-182=73,观察知

73<182。182-(73×2)=36,显然

36<73。73-(36×2)=1,(255,182)=1。所以这两个数是互质数。

/

21 17

2 4

不是

9 3

不是

13 39

不是

q

Press any key to continue

/

#include <stdioh>

int MaxFactor(int m,int n) { // 最大公约数

int t;

if(n < m) { t = n;n = m;m = t; }    

for(t = m;t > 0;t--) {

if(m % t == 0 && n % t == 0)

return t;

}

return 1; // 永远得不到执行。

}

void is_huzhishu(int x,int y,int res) {

if(1 == MaxFactor(x,y)) res = 1;

else res = 0;

}

int main() {

int m,n,res;

while(scanf("%d%d",&m,&n) == 2) {

is_huzhishu(m,n,&res);

if(res) printf("是\n");

else printf("不是\n");

}

return 0;

}

首先,根据条件,正整数加法乘法后还是正整数,n是一个正整数。

不妨设a>b(因为a、b互质,不会相等)

n=ax+by

n=a(x+(b/a)y)

n/a=x+(b/a)y

因为a、b互质,所以b/a是真分数;

而n>a且n>b,所以n/a必定是假分数,

令其整数部分为p,分数部分就是(n/a)-p=(n-ap)/a;(其中p为整数)

于是比较两边有:

p+(n-ap)/a=x+(b/a)y

两边变形得:

p-m+(n-ap+am)/a=x+(by)/a;

(其中0<=m<p,因为x是正整数)

有:

x=p-m,且by=n-ap+am

解得:

x=p-m,且y=(n-ap+am)/b

下面就是要证存在这个m,使y为正整数,也可以说是,找到正整数对(m,y)

由by=n-ap+am

得:

m=(by+ap-n)/a,而0=<m<p

所以有:

0=<(by+ap-n)/a<p,

解得:

(n-ap)/b=<y<n/b,

p是n的整数部分,就有n<2p=<ap(说明下:一个分数的整数部分是

肯定比分数部分大的,所以可得

n<2p)

于是n-ap<0,所以y最终的范围是(0,n/b),且y为正整数,可见:

确实存在这样的y,能使m为一在确定范围内的整数,反之,易知:

存在m,可使y=(by+ap-n)/a为整数。

好难的问题啊,我想了好久的。纯手打得阿,采纳以下阿

判断两个数是否互质的方法:

(1)1和任意大于1的自然数互质。

(2)2和任意奇数都是互质数。

(3)相邻的两个自然数都是互质数。

(4)相邻的两个奇数是互质数。

(5)不相同的两个质数是互质数。

(6)当一个数是合数,而另一个数是质数时(除了合数是质数的倍数的情况外),一般情况下这两个数也是互质数。24和7

2942是合数,但2942不是323的倍数。

323=1917

2942不是19和17的倍数

2942与323是互质的

以上就是关于求1到100内两个数互质的概率的c语言程序全部的内容,包括:求1到100内两个数互质的概率的c语言程序、急求vb程序设计 寻找互质数、有什么好方法能快速判断两个数是不是互质数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10103816.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存