程序找到下一个直接素数

时间:2015-10-01 09:59:09

标签: c

void main()    
{
   int n,i,j,flag=0,out;

   clrscr();

   printf("enter the num\n");

   scanf("%d",&n);

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

      flag=0;

      for(j=2;j<i;j++)
      {
         if(i%j==0)
         {
            flag=1;
            break;
         }
      }

      if(flag==0)
      {
         printf("next prime is:%d",i);
         break;
      }
   }

   getch();

}

在此代码中,如果我输入为8。然后i = 9,j = 2 然后9%2 == 0条件变为假,9将作为下一个素数打印,这是错误的答案。请给我正确的解决方案。

2 个答案:

答案 0 :(得分:2)

我检查了你的程序,它产生了正确的输出。

现在解释一下,对于你描述的情况

  

在此代码中,如果我输入为8。然后i = 9,j = 2然后9%2 == 0   条件变为假,9将作为下一个素数打印   这是错误的答案。

所以,它会得到(9%2 == 0)=&gt;假。然后它不会检查CREATE FUNCTION [dbo].[HashPassword] ( @Password VARCHAR(50), @PasswordSalt UNIQUEIDENTIFIER ) RETURNS UNIQUEIDENTIFIER AS BEGIN DECLARE @HashPassword UNIQUEIDENTIFIER SELECT @HashPassword = HASHBYTES('SHA1', CAST(@Password as varbinary) + CAST(@PasswordSalt as varbinary)) RETURN(@HashPassword) END 条件并将9打印为下一个素数。相反,它会增加j并继续循环直到string passwordShortened = HexStringShortened(password); string saltShortened = HexStringShortened(salt); var concated = passwordShortened.FromHexEncoded().Concat(saltShortened.FromHexEncoded()).ToArray(); SHA1 hasher = SHA1.Create(); byte[] hashBytes = hasher.ComputeHash(concated); string convertedFinal = ByteArrayToString(hashBytes); private static string HexStringShortened(string cleartext) { byte[] ba = Encoding.Default.GetBytes(cleartext); var hexString = BitConverter.ToString(ba); hexString = hexString.Replace("-", ""); if (hexString.Length > 59) { hexString = hexString.Substring(0, 60); } return hexString; } public static string ByteArrayToString(byte[] ba) { string hex = BitConverter.ToString(ba); return hex.Replace("-", ""); }

enter image description here

因此,它会产生正确答案。

答案 1 :(得分:0)

检查以下代码:

void main()
{
    int n,i,j;
    clrscr();

    printf("Enter the number : ");
    scanf("%d",&n);

    for(i=n+1;;i++)
    {
        for(j=2;j<i;j++)
        {
            if(i%j==0)
                break;
        }

        if(j==i)
        {
            printf("The next prime number is :%d",i);
            break;
        }
    }
    getch();
}