C中不使用标志和中断的素数
我刚刚开始学习C,我正在尝试素数,也许不用flag,break,bool 在这里,我试图建立一个程序,将给我第八个素数,它运行不正常,我非常不确定的一部分,决定是否一个数字是一个素数C中不使用标志和中断的素数,c,loops,for-loop,if-statement,primes,C,Loops,For Loop,If Statement,Primes,我刚刚开始学习C,我正在尝试素数,也许不用flag,break,bool 在这里,我试图建立一个程序,将给我第八个素数,它运行不正常,我非常不确定的一部分,决定是否一个数字是一个素数 int main(void){ int i,j,th = 0; int n = 8; for (i=2; th <= n; i++) { for(j=2; j<=i; j++) { if(i%j !=0) { th = th + 1;
int main(void){
int i,j,th = 0;
int n = 8;
for (i=2; th <= n; i++) {
for(j=2; j<=i; j++) {
if(i%j !=0) {
th = th + 1;
printf("%d",i);
}
}
}
}
int main(无效){
int i,j,th=0;
int n=8;
对于(i=2;th而言,问题在于有太多的情况属于以下情况:
if (i % j != 0)
例如,(i=4,j=3)但4不是素数。您需要将j从2循环到i的平方根,
确保它们都不可除
如果没有标志,这似乎很难做到(你可以做的一个技巧是将(i-1)!%i==0
用于i>4
)。在这个for循环中
for(j=2; j<=i; j++) {
if(i%j !=0) {
th = th + 1;
printf("%d",i);
}
}
是不正确的,因为i
总是可以自己整除
该程序可以按照下面的演示程序所示的方式进行查看
#include <stdio.h>
int main( void )
{
while ( 1 )
{
printf( "Enter a non-negative number (0 - exit): " );
unsigned int n;
if ( scanf( "%u", &n ) != 1 || n == 0 ) break;
putchar( '\n' );
for ( unsigned long long i = 0; n != 0; i++ )
{
int prime = i % 2 == 0 ? i == 2 : i != 1;
for ( unsigned long long j = 3; prime && j <= i / j; j += 2 )
{
prime = i % j != 0;
}
if ( prime )
{
printf( "%llu ", i );
--n;
}
}
putchar( '\n' );
putchar( '\n' );
}
}
也许这可以帮助您实现bool is_prime(int n){if(n%d)
->%d\n”
将是一个不错的选择start@cosinus0:所有大于3
的素数都是6k±1
的形式,这是一个巧妙的技巧,很好。@YanJun,我不明白你为什么要施加这样不必要的限制,比如不使用标志或break
。做任何你需要的事情来解决这个程序。尽可能最好的编程n要做的是编写小型、可测试、纯(无副作用)函数,并用它们编写程序。首先编写一个函数isPrime(int)
,然后对其进行测试。这是一个5行程序。此时,您绝对必须学会如何使用调试器。
#include <stdio.h>
int main( void )
{
while ( 1 )
{
printf( "Enter a non-negative number (0 - exit): " );
unsigned int n;
if ( scanf( "%u", &n ) != 1 || n == 0 ) break;
putchar( '\n' );
for ( unsigned long long i = 0; n != 0; i++ )
{
int prime = i % 2 == 0 ? i == 2 : i != 1;
for ( unsigned long long j = 3; prime && j <= i / j; j += 2 )
{
prime = i % j != 0;
}
if ( prime )
{
printf( "%llu ", i );
--n;
}
}
putchar( '\n' );
putchar( '\n' );
}
}
Enter a non-negative number (0 - exit): 20
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71
Enter a non-negative number (0 - exit): 8
2 3 5 7 11 13 17 19
Enter a non-negative number (0 - exit): 0